2009-04-15 32 views
64

¿Hay alguna manera de decirle a JUnit que ejecute un caso de prueba específico varias veces con datos diferentes continuamente antes de pasar al siguiente caso de prueba?Ejecutando el mismo caso de prueba JUnit varias veces con datos diferentes

+4

Al usar teorías (como lo señala @dfa) Junit tratará todas las pruebas como una sola prueba y dificultará determinar qué prueba ha fallado. Considerando que las Pruebas Paramétricas (como lo señala @ jjnguy) las tratan todas como pruebas diferentes, indicando claramente qué prueba falló. – mindreader

Respuesta

63

echar un vistazo a junit 4.4 theories:

import org.junit.Test; 
import org.junit.experimental.theories.*; 
import org.junit.runner.RunWith; 

@RunWith(Theories.class) 
public class PrimeTest { 

    @Theory 
    public void isPrime(int candidate) { 
      // called with candidate=1, candidate=2, etc etc 
    } 

    public static @DataPoints int[] candidates = {1, 2, 3, 4, 5}; 
} 
+0

Tengo algunos casos de prueba que siguen el formato como testxyz(), testpqr() .mi clase de prueba existente extiende TestCase. – Giridhar

+0

Thos no se están ejecutando si sigo este formato. – Giridhar

+0

primero debe convertirlos a JUnit 4 (simplemente usando la anotación @Test, en la mayoría de los casos) – dfa

2

Siempre hago un método auxiliar que ejecuta la prueba basada en los parámetros, y luego invoco ese método desde el método de prueba JUnit. Normalmente esto significaría que un solo método de prueba JUnit realmente ejecutaría muchas pruebas, pero eso no fue un problema para mí. Si desea varios métodos de prueba, uno para cada invocación distinta, le recomiendo que genere la clase de prueba.

3

Aquí hay un post que escribí que muestra varias formas de ejecutar las pruebas repetidas veces con ejemplos de código:

Run a JUnit test repeatedly

Se puede utilizar el corredor @Parametrized, o use el corredor especial incluido en la publicación

9

recientemente comencé el proyecto zohhak. que le permite escribir:

@TestWith({ 
    "25 USD, 7", 
    "38 GBP, 2", 
    "null, 0" 
}) 
public void testMethod(Money money, int anotherParameter) { 
    ... 
} 
1

Si no quiere o no puede utilizar corredor personalizado (. ej ya está utilizando otro corredor, como corredor Robolectric), puede probar este DataSet Rule.

3

Una manera mucho mejor (le permite tener más de un método de prueba) es el uso de JUnit con JUnitParams:

import junitparams.Parameters; 
import org.junit.Test; 

@RunWith(JUnitParamsRunner.class) 
Public class TestClass() { 

    @Test 
    @Parameters(method = "generateTestData") 
    public void test1(int value, String text, MyObject myObject) { 
     ... Test Code ... 
    } 

    .... Other @Test methods .... 

    Object[] generateTestData() { 
     MyObject objectA1 = new MyObject(); 
     MyObject objectA2 = new MyObject(); 
     MyObject objectA3 = new MyObject(); 

     return $(
      $(400, "First test text.", objectA1), 
      $(402, "Second test text.", objectA2), 
      $(403, "Third test text.", objectA3) 
     ); 
    } 
} 

Usted puede obtener los junitparams proyectan here.

1

Si ya está utilizando un @RunWith en su clase de prueba, probablemente necesite echar un vistazo a this.

+0

2018-01-19 downvote. Por favor, tenga la cortesía de explicar su pensamiento. Puedes aprender algo –

Cuestiones relacionadas