2011-10-27 22 views
9

Quería crear una anotación JUnit personalizada, algo similar a la etiqueta esperada en @Test, pero también quiero verificar el mensaje de anotación.JUnit anotación personalizada

¿Alguna pista sobre cómo hacerlo, o tal vez hay algo listo?

Respuesta

4

JUnit 4.9 apretó el uso de "reglas" de la biblioteca para las pruebas, que creo que podría funcionar tan bien como una anotación personalizada. Eche un vistazo a TestRule como punto de partida. Puede implementar una regla basada en esa interfaz, y luego usar las anotaciones @ClassRule o (método-nivel) @Rule para ponerlas en juego en sus pruebas.

Un buen ejemplo concreto es ExpectedException, que le permite especificar excepciones como el parámetro esperado para @Test does (y algo más).

4

Para hacer que JUnit4 recoja sus anotaciones personalizadas, debe escribir su propia implementación de Runner personalizada y luego suministrarla a la anotación RunWith en la clase de prueba.

Puedes comenzar por echar un vistazo al BlockJUnit4ClassRunner, que es el corredor de implementación predeterminado para JUnit 4 (si la memoria me sirve).

Suponiendo que se desea recoger una anotación personalizada denominada @MyTest con un corredor MyRunner costumbre, su clase de prueba sería algo como:

@RunWith(MyRunner.class) 
class Tests { 
    ... 
    @MyTest 
    public void assumeBehaviour() { 
     ... 
    } 
} 

La respuesta de "Reid Mac" hace un trabajo bastante bueno al describir cómo se implementa una anotación personalizada.

+6

Ya no hay respuesta "Reid Mac" .. – BrunoJCM

1

Puede crear TestRule personalizado como se menciona en la primera respuesta o puede usar/ampliar TestWatcher que ya tenga un método para procesar el inicio/finalización de la prueba. Hay un método apply(Statement base, Description description) donde la descripción es en realidad un envoltorio alrededor de su método de prueba. Description tiene un gran método getAnnotation(annotationClass) que le permitirá hacer lo que quiera especificando una anotación personalizada que desea procesar

Cuestiones relacionadas