Los DataPoints se aplican a la clase. Si tiene un método @Theory que toma un int, y usted tiene un DataPoint que es una matriz de ints, entonces se llamará con el 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);
}
}
Para esto se necesitan test1 con 45 & 46 y test2 con 45 & 46. Se llama testString1 con "foobar" y "barbar" y testString2 con "foobar" y "barbar".
Si realmente desea utilizar diferentes conjuntos de datos para diferentes teorías, se puede envolver los datos en una clase privada:
@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);
}
}
Esto exige test1 test2 con 45 y con 46. Esto funciona, pero en mi opinión, oscurece el código, y puede ser una mejor solución simplemente dividir la clase de prueba en dos clases.
@Mathew Gracias por la respuesta. Entonces no hay ninguna característica vinculante como tal. Usará el envoltorio en clase privada por el momento. Pero aún no es elegante. Todavía no entiendo por qué los DataPoints están adjuntos a la clase? Tienen más sentido a nivel de método. –
La idea es que tenga una cantidad de puntos de datos, y puede probar una cantidad de teorías: para eso necesita una cantidad de métodos de prueba. Si está satisfecho con la respuesta, ¿puede aceptarla, por favor? –
+1 para dividir la clase de prueba en dos clases. Si test1 y test2 necesitan diferentes conjuntos de datos para pasar y tener sentido, entonces esencialmente están probando diferentes comportamientos y lógicamente pueden separarse. –