をテストし、私はJUnitの中でこのような何かをしたいと思います:継承(または代替)
@Runwith(Parameterized.class)
public abstract class BaseTest {
protected abstract List<Object[]> extraParams();
protected abstract ClassUnderTest testObject;
@Parameters
public Collection<Object[]> data() {
List<Object> params = ...; // a standard set of tests
params.addAll(extraParams());
return params;
}
@Test
public doTest() {
// assert things about testObject
}
}
public class ConcreteTest extends BaseTest {
protected ClassUnderTest = new ConcreteClass(...);
protected List<Object[]) extraParams() {
List<Object> extraParams = ...; // tests specific to this concrete type
return extraParams;
}
}
このクラスを拡張することで、私は下のオブジェクトに対して標準テストの束を実行するようにするためテスト、およびコンクリートクラスで指定された余分なものを加えたものです。
しかし、jUnitでは、@Parameters
メソッドが静的であることが必要です。他にどのようにして、標準的なパラメタとコンクリートクラスの余分なパラメタのセットを持たせることができますか?
私がこれまでに作ってみた最高のは抽象クラスで非注釈付きCollection<Object[]> standardParams()
を持つこと、およびサブクラスがメソッドが含まれていることを要求することです:
@Parameters
public Collection<Object[]> data() {
List<Object> params = standardParams();
params.addAll(...); // extra params
return params;
}
...しかし、このISNそれはサブクラスの作家にあまりにも多くの責任を課すので、私が望むように整頓してはいけません。
スリム:あなたは私の答えを見ていることはできますか? – developer
@javaguyごめんなさい、それは週末だった。 – slim