Ausführen von code vor und nach allen tests in ein bombensicherer Ausführung
Ich habe einen Grizzly HttpServer
laufen lassen will das ich für die gesamte Dauer der test-Gruppe Ausführung. Darüber hinaus möchte ich die Interaktion mit dem globalen HttpServer Beispiel aus einem @Rule
im inneren des tests selbst.
Da bin ich mit Maven-Surefire eher als unter Verwendung der JUnit-test-Suiten, die ich nicht benutzen kann @BeforeClass
/@AfterClass
auf die test-suite selbst.
Gerade jetzt, alles, was ich denken kann, ist träge Initialisierung eines statischen Feldes und stoppen der server von einem Runtime.addShutdownHook()
-- nicht schön!
- welche Sie verwenden, wenn nicht Junit ?
- wenn Sie mit POJO oder TestNG tests können Sie stil mit @BeforeClass
- Aktualisierte Frage zu klären, dass ich mit maven-surefire
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es zwei Möglichkeiten, ein maven-Lösung und eine todsichere Lösung. Das zuletzt gekoppelte Lösung führen Sie ein plugin in der
pre-integration-test
undpost-integration-test
phase. Sehen Einführung in die Build-Lifecycle - Lifecycle-Referenz. Ich bin nicht vertraut mit grizzly, aber hier ist ein Beispiel mit jetty:Beachten Sie, dass die phase
start
istpre-integration-test
undstop
istpost-integration-test
. Ich bin mir nicht sicher, ob es ein grizzly-maven-plugin, aber man könnte die maven-antrun-plugin statt.Die zweite Möglichkeit ist die Verwendung eines JUnit RunListener.
RunListener
hört auf test-events, z.B. test start test end, Testfehler, test Erfolg usw.So konnte man hören, für RunStarted und RunFinished. Diese würde starten/stoppen Sie die Dienste, die Sie wollen. Dann, in surefire, können Sie einen benutzerdefinierten listener mit:
Dies ist aus Maven-Surefire-Plugin, Mit JUnit-Mit benutzerdefinierten Listenern und Reporter
HttpServer
Instanz aus derTestRule
, aber dieRunListener
klingt vielversprechend, danke!