2013-08-02 12 views
5

Ich wollte einen Screenshot machen, wenn ein Test fehlschlägt, aber, nach, führen Sie die @ After-Methode.Führen Sie einen TestWatcher vor dem @After

Es ist möglich, dies zu tun? Mit TestWatcher läuft die Methode failed() nach dem @After.

Außerdem kann ich den @After-Inhalt nicht an den TestWatcher übergeben() weil ich einen super.afterTest() @After aufrufen muss.

Irgendwelche Ideen?

+0

ich diesen Blog-Eintrag gefunden https://garygregory.wordpress.com/2011/09/25/understaning -junit-Methode-Order-Ausführung/extrem hilfreich beim Verständnis der JUnit-Methodenausführungsbefehle. – sam

Antwort

0

Ich hatte das gleiche Problem und änderte meinen Code, um den Code von @After in der beendeten() Methode einer neuen Regel auszuführen. So ist die Reihenfolge der Ausführung ist jetzt:

  • @After
  • fehlgeschlagen() (falls nicht)
  • fertig()
0

Es ist unmöglich für TestWacher Methoden finished() oder failed() zu laufen, bevor Die @after Methode vorausgesetzt, dass TestWatcher eine Basisklasse für Rules ist.

Aufgrund der Art und Weise, dass Regeln eingerichtet werden, können Sie keine Regel haben, die nach @before oder vor @after kommt. Sie können sich Regeln wie Shells vorstellen, die Sie auf die Testmethode anwenden. Die erste Shell ist @before/@after. Danach werden die @rules angewendet. (Referenz @Troy in Apply '@Rule' after each '@Test' and before each '@After' in JUnit)

Die Ausführungsreihenfolge für eine @test, ist wie folgt

@TestWatcher starting 
@Before 
@Test 
@After 
@TestWatcher finished 
Verwandte Themen