2011-10-27 2 views
9

Volevo creare un'annotazione JUnit personalizzata, qualcosa di simile al tag previsto in @Test, ma voglio anche controllare il messaggio di annotazione.JUnità annotazione personalizzata

Qualche suggerimento su come farlo, o forse c'è qualcosa pronto?

risposta

4

JUnit 4.9 ha rafforzato l'uso da parte della biblioteca di "regole" per i test, che a mio avviso potrebbero funzionare come un'annotazione personalizzata. Dai uno sguardo a TestRule come punto di partenza. È possibile implementare una regola basata su tale interfaccia e quindi utilizzare le annotazioni @Rule o (metodo-livello) @Rule per metterle in gioco nei test.

Un buon esempio concreto è ExpectedException, che consente di specificare eccezioni come il parametro previsto per @Test (e quindi alcuni).

4

Per fare in modo che JUnit4 prelevi le annotazioni personalizzate, è necessario scrivere la propria implementazione Runner personalizzata e quindi fornirla con l'annotazione RunWith nella classe Test.

È possibile iniziare dando un'occhiata a BlockJUnit4ClassRunner, che è il runner di implementazione predefinito per JUnit 4 (se la memoria mi serve bene).

Supponendo che si vorrebbe prendere un'annotazione personalizzata denominata @MyTest con un corridore MyRunner personalizzato, la classe di test sarebbe simile:

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

La risposta da "Reid Mac" fa un lavoro abbastanza buono a decifrare come viene implementata un'annotazione personalizzata.

+6

Non c'è più la risposta "Reid Mac". – BrunoJCM

1

È possibile creare personalizzato TestRule come indicato nella prima risposta oppure è possibile utilizzare/estendere TestWatcher che dispone già del metodo per l'elaborazione dell'inizio/fine del test. C'è un metodo apply(Statement base, Description description) in cui la descrizione è in realtà un involucro attorno al metodo di prova. Description ha un ottimo metodo getAnnotation(annotationClass) che consente di fare ciò che si desidera specificando un'annotazione personalizzata che si desidera elaborare