Führen Sie einen fehlgeschlagenen Test mit Junit erneut aus

8

Ich versuche, ein bestehendes System des automatisierten Selenium-Tests zu verbessern. Mein Ziel ist es, die Tests zu wiederholen, die wegen Verbindungsproblemen fehlschlagen. Ich habe diesen Thread gefunden und versucht, diesem Thema zu folgen Wie die erneute Ausführung fehlgeschlagen ist JUnit testet sofort? das hat sich als ziemlich nützlich erwiesen.

In meinem Fall besteht die Suite aus Klassen, also habe ich versucht @Rule durch @ClassRule zu ersetzen, um für jeden Versuch auch die @Before und @After Teile zu wiederholen. Es tut mir leid für meine Ignoranz, aber wo soll ich diese Regel platzieren? In meiner Suite-Klasse? Oder in den Klassen, die den Test darstellen?

    
Lorm 24.05.2013, 15:53
quelle

4 Antworten

4

Hier ist meine Lösung, die auf dem in der Frage erwähnten basiert.

Es ist eine Kombination aus @Rule , FailedRule und @ClassRule , RetryRule

%Vor%

Es gibt:

%Vor%

Wenn ich die o.equals("foo"); in test2 kommentiere, läuft im ersten Versuch alles gut:

%Vor%     
ToYonos 19.01.2015 17:15
quelle
3

Ich bin der ursprüngliche Beantworter von Wie kann ich die fehlgeschlagene JUnit erneut ausführen? Tests sofort?

Wenn ich das richtig verstanden habe, liegt das Problem daran, dass @Before vor dem Code in RetryRule ausgeführt wird und danach @After .

Ihr aktuelles Verhalten ist also ungefähr so:

%Vor%

Aber Sie können Ihre @Before und @After als Regel implementieren - es gibt eine Regel ExterneRessource , die genau das tut. Sie würden in der Regel @Before und @After implementieren:

%Vor%

Dann brauchen Sie nicht @Before und @After . Sie können diese Regeln dann verketten, indem Sie RuleChain . Dies zwingt eine Reihenfolge der Ausführung zu Ihren Regeln:

%Vor%

Ihre endgültige Lösung wäre also etwa so:

%Vor%

Beachten Sie, dass Sie, wenn Sie RuleChain verwenden, nicht mehr die @Rule -Anmerkung für ExternalResource und RetryRule benötigen, sondern für die RuleChain .

    
Matthew Farwell 21.01.2015 09:45
quelle
0

Sie schmücken den Testnamen selbst mit den Attributen @After oder @Afterclass :

%Vor%

Etwas zu beachten, @Afterclass wird immer ausführen; Auch wenn Sie eine @Beforeclass verwenden, die eine Ausnahme auslöst.

    
Brian 24.05.2013 16:25
quelle
0

Möge dies das Problem lösen:

1) Testklasse sollte von junit.framework.TestCase

geerbt werden

2) Führen Sie Ihre Tests mit so etwas aus

%Vor%

Am Ende enthält result will die letzten Ergebnisse des Testlaufs. Nachdem Sie analysiert haben, welcher Test fehlgeschlagen ist, können Sie ihn erneut ausführen.

    
Cuzz 19.01.2015 15:05
quelle

Tags und Links