Junit 4の@parameters
-
05-07-2019 - |
質問
Parameterizedクラスで実行されているjunitテストクラスの@Parametersで複数のメソッドを使用できますか?
@RunWith(value = Parameterized.class)
public class JunitTest6 {
private String str;
public JunitTest6(String region, String coverageKind,
String majorClass, Integer vehicleAge, BigDecimal factor) {
this.str = region;
}
@Parameters
public static Collection<Object[]> data1() {
Object[][] data = {{some data}}
return Arrays.asList(data);
}
@Test
public void pushTest() {
System.out.println("Parameterized str is : " + str);
str = null;
}
@Parameters
public static Collection<Object[]> data() {
Object[][] data = {{some other data}}
return Arrays.asList(data);
}
@Test
public void pullTest() {
System.out.println("Parameterized new str is : " + str);
str = null;
}
}
解決
理論ランナーを使用できます(単語理論を検索するにはそのリンク)異なるパラメーターを異なるメソッドに渡します。
他のヒント
おそらく data1
メソッドですが、それを保証するものではありません。JVMが最初にjunit4に与えたものを使用します。
junitの関連コードは次のとおりです。
private FrameworkMethod getParametersMethod(TestClass testClass) throws Exception {
List<FrameworkMethod> methods= testClass.getAnnotatedMethods(Parameters.class);
for (FrameworkMethod each : methods) {
int modifiers= each.getMethod().getModifiers();
if (Modifier.isStatic(modifiers) && Modifier.isPublic(modifiers))
return each;
}
throw new Exception("No public static parameters method on class " + testClass.getName());
}
したがって、最初に検出された静的な注釈付きパブリックメソッドが使用されますが、任意の順序で検出される可能性があります。
そのように書かれたテストがあるのはなぜですか? @Parameters
アノテーション付きメソッドは1つだけにしてください。
複数のデータメソッドを持つように指定されていません。 スカッフマンの回答で確認できます。
2つのデータメソッドの実装が提供されないのはなぜですか?
答えは次のとおりです。カップリング。
このテストを2つのテストケースに分割するのは複雑すぎますか?小さな継承を導入し、共通のメソッドを共有できます。 2つのテストケースを使用すると、2つの別々のデータメソッドを提供し、非常に適切にテストできます。
お役に立てば幸いです。
同じパラメーターを操作するメソッドの各セットに対して内部クラスを作成できます。例:
public class JunitTest6 {
@RunWith(value = Parameterized.class)
public static class PushTest{
private String str;
public PushTest(String region) {
this.str = region;
}
@Parameters
public static Collection<Object[]> data() {
Object[][] data = {{some data}}
return Arrays.asList(data);
}
@Test
public void pushTest() {
System.out.println("Parameterized str is : " + str);
str = null;
}
}
@RunWith(value = Parameterized.class)
public static class PullTest{
private String str;
public PullTest(String region) {
this.str = region;
}
@Parameters
public static Collection<Object[]> data() {
Object[][] data = {{some other data}}
return Arrays.asList(data);
}
@Test
public void pullTest() {
System.out.println("Parameterized new str is : " + str);
str = null;
}
}
}
所属していません StackOverflow