2009-10-10 9 views
27

Tengo un código de configuración común que he excluido de un método marcado con @Before. Sin embargo, no es necesario que todo este código se ejecute para cada prueba individual. ¿Hay alguna manera de marcarlo para que el método @Before solo se ejecute antes de ciertas pruebas?JUnit: @Antes solo para algunos métodos de prueba?

Respuesta

28

Simplemente pase las pruebas que no necesitan el código de configuración a una clase de prueba separada. Si tiene algún otro código común para las pruebas que sería útil mantener, muévalo a una clase auxiliar.

+4

+1 en otras palabras, no use @Before si no desea el comportamiento de @Before :) –

+0

realmente útil @Kirschstein :(- "hacerlo bien en primer lugar" –

3

O use TestNG. Le da un control más detallado sobre las pruebas.

1

Es posible lograrlo también a través de Assume desde JUnit. Y luego puede verificar el nombre del método para el que desea procesar @Before.

public class MyTest { 
    @Rule 
    public TestName testName = new TestName(); 

    @Before 
    public void setUp() { 
     assumeTrue(testName.getMethodName().equals("myMethodName")); 
     // setup follows 
    } 
} 

Comprobar la topic para más ideas sobre @Rule.

+0

No utilizar supongamos que detiene la ejecución de toda la prueba, no solo el método @Before. if (! testName.getMethodName(). equals ("myMethodName")) {return;} (disculpe el espaciado) funcionaría mejor. – jMcK

+0

Francamente encuentro la idea de "si el nombre de prueba es igual a" no tiene sentido, ya que también podría llamar directamente a la función antes y después en las pruebas que los necesitan, y eliminar las anotaciones Antes y Después. – aliteralmind

0

No estoy seguro de @Before, pero recientemente se me ocurrió una estrategia para @After block para que se ejecute selectivamente. La implementación fue directa. Tengo algunos indicadores establecidos en los valores predeterminados como parte de la clase de prueba. Se restablecen a los valores predeterminados en @Antes de la clase. En la clase, tengo que hacer cosas específicas para una bandera, configuré esas banderas & en @Después de verificar los valores de bandera para hacer las tareas respectivas.

Cuestiones relacionadas