2011-07-05 15 views
5

Duplicar posible:
Conditionally ignoring tests in JUnit 4¿Cómo hago que JUnit ignore el caso de prueba específico en tiempo de ejecución cuando se ejecuta con el corredor parametrizado?

que tiene una serie de pruebas del sistema que se ejecuta con Parameterized corredor y que me gustaría correr contra diferentes entornos. Algunas de las pruebas sólo se deben ejecutar en entornos no productivos, y cuando se ejecuta en la producción me gustaría verlos como ignorado, así que estoy buscando una manera de decir:

@Test 
public void dangerousTest() { 
    if (isProduction(environment)) ignore(); // JUnit doesn't provide ignore() 
    environment.launchMissilesAt(target); 
    assertThat(target, is(destroyed())); 
} 

La cuestión es que JUnit no proporciona el método ignore() para ignorar un caso de prueba en tiempo de ejecución. Además, Assume.assumeTrue(isNotProduction(environment)) no parece funcionar con el corredor Parameterized; simplemente marca las pruebas como pasadas, no ignoradas. Alguna idea de cómo algo equivalente se puede lograr con las restricciones que:

  • la suite necesita utilizar Parameterized corredor
  • las pruebas tienen que aparecer como ignorado si el conjunto se ejecuta en la producción?
+0

Eche un vistazo aquí quizás ayude http://stackoverflow.com/questions/817135/grouping-junit-tests –

Respuesta

5

Siempre se puede hacer

if (isProduction(environment)) return; 

La prueba estaría marcada como fue aprobado, pero no sería lanzada al menos los misiles.

O usted podría utilizar Assume, que nunca he utilizado, pero se documenta esta manera:

Un conjunto de métodos útiles para afirmar suposiciones acerca de las condiciones en la que una prueba es significativa. Una suposición de con error no significa que el código es roto, pero que la prueba no proporciona información útil . El corredor JUnit predeterminado trata las pruebas con las suposiciones que fallan como ignoradas. Los corredores personalizados pueden comportarse de manera diferente. Por ejemplo:

Su código sería así tener este aspecto:

@Test 
public void dangerousTest() { 
    assumeTrue(!isProduction(environment)); 
    // ... 
} 
+0

Sí, pero mi requisito es que se marque como ignorado por JUnit. –

+0

Ver mi respuesta editada –

+0

Gracias; Intenté eso pero parece que el corredor que uso no respeta 'AssumptionViolatedException's. Pregunta actualizada en consecuencia. –

1

dos puntos:

Con esta versión, una suposición fallida dará lugar a que la prueba se marque como pasando, independientemente de lo que pueda afirmar el código debajo de la suposición. En el futuro, esto puede cambiar, y una suposición fallida puede hacer que se ignore la prueba : sin embargo, los corredores de de terceros actualmente no permiten esta opción .

Me parece muy intuitivo este contador, y aún más aterrador es el hecho de que este comportamiento podría cambiar en el futuro. Desearía que hubieran mantenido esa característica hasta que funcionó como se esperaba.

  • Si usa TestNG es una opción, puede usar grupos para esto. Poner su método de prueba en el grupo de "producción":

    @Test(groups = "production") 
    public void dangerousTest() { ... } 
    

y cuando se está ejecutando la prueba, excluir el grupo "producción".

Cuestiones relacionadas