2013-04-13 12 views

Antwort

1

können Sie versuchen, mit stop() - Methode von org.eclipse.jetty.server.Server, die intern von Dropwizard verwendet wird.

+0

Können Sie mich bitte auf einen Beispielcode hinweisen? Ich verstehe nicht, wie ich vorgehen soll. – Neo

12

Sie können den Dienst in einem neuen Thread starten. Sobald der Test beendet ist, wird der Dienst automatisch heruntergefahren.

Ab Dropwizard 0.6.2 jedoch enthält das Dropwizard-Testmodul genau für diesen Anwendungsfall eine junit rule (see here).

Verwendung dieser Regel wird wie folgt aussehen:

Class MyTest { 

    @ClassRule 
    public static TestRule testRule = new DropwizardServiceRule<MyConfiguration>(MyService.class, 
        Resources.getResource("service.yml").getPath())); 

    @Test 
    public void someTest(){ 
    .... 
+0

Warum haben sie diese Klasse nicht dokumentiert? (rhetorisch) Wie hast du das herausgefunden, @LiorH? (nicht rhetorisch) – DavidS

+0

Ja, das ist seltsam, es ist nicht dokumentiert, hoffe, es wird nicht entfernt werden. Jemand bei der Arbeit hat mir diese Klasse gezeigt, ich weiß nicht, wie er sie gefunden hat. – LiorH

+0

Hallo @LiorH - schön dich hier zu sehen! Sehr hilfreich;) – Galz

3

Dank @LiorH für diesen großen Vorschlag.

Hier ist eine vollständige Testklasse mit der DropwizardServiceRule in dropwizard-0.6.2.

Zuerst erstellen Sie eine Service-Konfiguration zum Testen: testing-server.yml und legen Sie es in den Klassenpfad des Tests (z. B. src\test\resources). Auf diese Weise können Sie verschiedene Ports eingestellt für den Test-Service zu nutzen:

http: 
    port: 7000 
    adminPort: 7001 

Eine einfache Test-Klasse, die überprüft, ob es eine Ressource an der Stelle „/ Nachfrage“ sieht wie folgt aus:

class TheServiceTest { 

    @ClassRule 
    public static DropwizardServiceRule RULE = new DropwizardServiceRule<MyConfiguration>(TheService.class, 
      Resources.getResource("testing-server.yml").getPath()); 

    @Test 
    public void 
    dropwizard_gets_configured_correctly() throws Exception { 
     Client client = new Client(); 

     ClientResponse response = client.resource(
       String.format("http://localhost:%d/request", RULE.getLocalPort())) 
         .get(ClientResponse.class); 

     assertThat(response.getStatus(), is(200)); 
    } 
} 

Ich habe auch den Import hinzugefügt, falls Sie nicht wissen, welche Implementierung zu wählen ist.

Am Ende der Tests wird der Server ordnungsgemäß heruntergefahren, so dass Sie sich keine Sorgen machen müssen.

0

Oder Sie verwenden diese Java-Funktion in Ihrem main/Konstruktor ...:

// In case jvm shutdown 
    Runtime.getRuntime().addShutdownHook(new Thread() { 
     @Override 
     public void run() 
     { 
      // what should be closed if forced shudown 
      // .... 

      LOG.info(String.format("--- End of ShutDownHook (%s) ---", APPLICATION_NAME)); 
     } 
    }); 
6

Halten Sie die environment Variable um und fügen Sie die folgende Methode zur Anwendung:

public void stop() throws Exception { 
    environment.getApplicationContext().getServer().stop(); 
} 

Jetzt können Sie Rufen Sie myService.stop() auf, um den Server zu stoppen.

+0

Ich fand dies sehr nützlich, um die DW-Anwendung zu stoppen, wenn sie als Windows-Dienst ausgeführt wird (z. B. mit Apache Commons Daemon). –

Verwandte Themen