2017-03-01 2 views
0

Ich schreibe den Integrationstest, der während seiner Arbeit mehrere Server startet. Ich muss sicher sein, dass sie nach dem Test in jedem möglichen Fall heruntergefahren werden, einschließlich des manuellen Teststops mit IDE. Gibt es einen Weg, dies zu erreichen?Wie führe ich die Logik nach dem Test manuell aus?

Antwort

1

Sie können fast jeden Stopp/halt Szenario decken durch einen Shutdown-Haken Registrierung:

Runtime.getRuntime().addShutdownHook(new Thread() { 
    @Override 
    public void run() { 
     System.out.println("Gracefully shutting down the application/test"); 
    } 
}); 

jedoch, wenn jemand ein kill -9 ausgeben, dann nicht einmal die shutdownHook erfassen werden, da dieses Signal vom Betriebssystem behandelt wird Dadurch wird der Prozess abgebrochen/abgebrochen, ohne dass die Steuerung erneut an ihn gesendet wird.

1

Eine gute Wahl ist ein Shutdown-Hook innerhalb einer benutzerdefinierten JUnit runner zu verwenden, zum Beispiel wie folgt:

import org.junit.runners.BlockJUnit4ClassRunner; 
import org.junit.runners.model.InitializationError; 

public class MyRunner extends BlockJUnit4ClassRunner { 

    public MyRunner(Class<?> klass) throws InitializationError { 
     super(klass); 

     Runtime.getRuntime().addShutdownHook(new Thread("app-shutdown-hook") { 
      @Override 
      public void run() { 
       // Your code here 
       System.out.println("End of test"); 
      } 
     }); 
    } 

} 

Dann verwenden Sie diesen Läufer Ihre Tests auszuführen:

@RunWith(MyRunner.class) 
public class MyTest { 

    @Test 
    public void test() { 
     System.out.println("My test"); 
    } 

} 
Verwandte Themen