データポイントは、クラスに適用される特定の@Theorysに特定@DataPointsをバインドする方法。 @Theoryメソッドがintをとり、intの配列であるDataPointを持っている場合、intで呼び出されます。
@RunWith(Theories.class)
public class TheoryTest {
@DataPoint public static int input1 = 45;
@DataPoint public static int input2 = 46;
@DataPoints public static String[] inputs = new String[] { "foobar", "barbar" };
@Theory public void testString1(String input) {
System.out.println("testString1 input=" + input);
}
@Theory public void testString2(String input) {
System.out.println("testString2 input=" + input);
}
@Theory public void test1(int input) {
System.out.println("test1 input=" + input);
}
@Theory public void test2(int input) {
System.out.println("test2 input=" + input);
}
}
は、これは45 & 46それは "foobarに" と "BARBAR" と "foobarに" と "BARBAR" とtestString2でtestString1を呼び出すと45 & 46とTEST1、TEST2とを呼び出します。
あなたが本当に異なる理論のために異なるデータセットを使用する場合は、プライベートクラスにデータをラップすることができます
@RunWith(Theories.class)
public class TheoryTest {
public static class I1 { int i; public I1(int i) { this.i = i;} }
public static class I2 { int i; public I2(int i) { this.i = i;} }
@DataPoint public static I1 input1 = new I1(45);
@DataPoint public static I2 input2 = new I2(46);
@Theory
public void test1(I1 input) {
System.out.println("test1 input=" + input.i);
}
@Theory
public void test2(I2 input) {
System.out.println("test2 input=" + input.i);
}
}
これは、これは動作します46と45とTEST2とTEST1を呼び出しますが、私の中にそれはコードを覆い隠し、Testクラスを2つのクラスに分割するより良い解決策かもしれません。
@Mathew答えをありがとう。そのような拘束力のある機能はありません。当面、プライベートクラスのラッピングを使用します。しかしそれはまだエレガントではありません。私はまだDataPointsがクラスに添付されている理由を理解できませんか?彼らはメソッドレベルでより意味をなさない。 –
考えられるのは、データポイントが多数あり、いくつかの理論をテストできるということです。そのためには、いくつかのテストメソッドが必要です。あなたが答えに満足しているなら、それを受け入れることができますか? –
+1 Testクラスを2つのクラスに分割します。 test1とtest2が異なるデータセットを渡して意味をなす必要がある場合は、本質的に異なる動作をテストし、論理的に分離することができます。 –