Esecuzione del codice prima e dopo tutti i test in un’esecuzione infallibile

Ho un HttpServer Grizzly che voglio eseguire per l’intera durata dell’esecuzione di un gruppo di test. Inoltre, voglio interagire con l’istanza globale HttpServer da una @Rule all’interno dei test stessi.

Poiché utilizzo Maven Surefire anziché utilizzare le suite di test JUnit, non posso utilizzare @BeforeClass / @AfterClass nella suite di test stessa.

In questo momento, tutto quello che posso pensare è inizializzare pigramente un campo statico e fermare il server da un Runtime.addShutdownHook() – non bello!

Ci sono due opzioni, una soluzione esperta e una soluzione sicura. La soluzione meno accoppiata è quella di eseguire un plug-in nella fase di pre-integration-test e post-integration-test . Vedere Introduzione al ciclo di vita di build – Riferimento ciclo di vita . Non ho familiarità con Grizzly, ma qui c’è un esempio che usa il molo:

     org.mortbay.jetty maven-jetty-plugin  /xxx    start-jetty pre-integration-test  run      stop-jetty post-integration-test  stop     

Si noti che la fase di start è pre-integration-test e stop è post-integration-test . Non sono sicuro se ci sia un plug -in per il Maven grizzly, ma potresti usare il plugin maven-antrun .

La seconda opzione è utilizzare JUnit RunListener . RunListener ascolta gli eventi di test, come inizio test, fine prova, errore test, successo test ecc.

 public class RunListener { public void testRunStarted(Description description) throws Exception {} public void testRunFinished(Result result) throws Exception {} public void testStarted(Description description) throws Exception {} public void testFinished(Description description) throws Exception {} public void testFailure(Failure failure) throws Exception {} public void testAssumptionFailure(Failure failure) {} public void testIgnored(Description description) throws Exception {} } 

Quindi puoi ascoltare RunStarted e RunFinished. Questi avviare / interrompere i servizi che si desidera. Quindi, in surefire, puoi specificare un listener personalizzato, usando:

  org.apache.maven.plugins maven-surefire-plugin 2.10    listener com.mycompany.MyResultListener,com.mycompany.MyResultListener2     

Si tratta di Maven Surefire Plugin, Using JUnit, Utilizzo di listener e reporter personalizzati