Точки данных применяются к классу. Если у вас есть метод @Theory, который принимает целое число, и у вас есть DataPoint, который является массивом целых чисел, то он будет вызываться с целым числом.
@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);
}
}
Это вызывает test1 с 45 и 46 и test2 с 45 и 46. Это вызывает testString1 с "foobar" и "barbar" и testString2 с "foobar" и "barbar".
Если вы действительно хотите использовать разные наборы данных для разных теорий, вы можете обернуть данные в закрытый класс:
@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);
}
}
Это вызывает test1 с 45 и test2 с 46. Это работает, но, на мой взгляд, затеняет код и может быть лучшим решением просто разделить класс Test на два класса.