2013-08-02 11 views
5

Volevo fare uno screenshot quando un test fallisce, ma, afterwords, eseguire il metodo @After.Eseguire un TestWatcher prima del @After

È possibile farlo? Con TestWatcher il metodo failed() viene eseguito dopo @After.

Inoltre, non posso passare il contenuto di @After a TestWatcher finished() perché ho un super.afterTest() per chiamare @After.

Qualche idea?

+0

Ho trovato questo post del blog https://garygregory.wordpress.com/2011/09/25/understaning -junit-method-order-execution/estremamente utile per comprendere gli ordini di esecuzione del metodo JUnit. – sam

risposta

0

Ho avuto lo stesso problema e ho cambiato il mio codice per eseguire il codice da @After nel metodo finished() di una nuova regola. Così l'ordine di esecuzione è ora:

  • @After
  • falliti() (se fallito)
  • finito()
0

E 'impossibile per TestWacher metodi finished() o failed() da eseguire prima il metodo @after dato che TestWatcher è una classe base per Rules.

A causa del modo in cui vengono impostate le regole, non è possibile avere una regola successiva a @before o prima di @after. Puoi pensare a regole come le shell che hai inserito nel metodo di prova. La prima shell da continuare è @before/@after. Successivamente vengono applicati gli standard @rules. (Riferimento @Troy in Apply '@Rule' after each '@Test' and before each '@After' in JUnit)

L'ordine di esecuzione, per un @test, è la seguente

@TestWatcher starting 
@Before 
@Test 
@After 
@TestWatcher finished 
Problemi correlati