2013-04-13 29 views

Odpowiedz

1

możesz spróbować użyć metody stop() org.eclipse.jetty.server.Server, która jest wewnętrznie używana przez Dropwizard.

+0

Czy możesz wskazać mi przykładowy kod? Nie rozumiem, jak sobie z tym poradzić. – Neo

12

Usługę można uruchomić w nowym wątku, po zakończeniu testu usługa automatycznie się wyłączy.

Jednak uruchamianie w dropwizard 0.6.2 moduł testujący dropwizard zawiera junit rule dokładnie dla tego przypadku użycia (see here).

Zastosowanie tej zasady będzie wyglądać mniej więcej tak:

Class MyTest { 

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

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

Dlaczego nie udokumentowali tej klasy? (retoryczne) Jak się o tym dowiedziałeś @LiorH? (nie retoryczne) – DavidS

+0

tak, to dziwne, że nie jest udokumentowane, mam nadzieję, że nie zostanie usunięte. Ktoś w pracy wskazał mi tę klasę, nie wiem, jak ją znalazł. – LiorH

+0

Witam @LiorH - miło cię tu widzieć! Bardzo pomocne;) – Galz

3

Thanks @LiorH dla tego wielkiego sugestię.

Oto pełna klasa testowa wykorzystująca DropwizardServiceRule w dropwizard-0.6.2.

Najpierw utwórz konfigurację usługi do testowania: testing-server.yml i umieść ją w ścieżce klasy testu (np. src\test\resources). W ten sposób można ustawić różne porty dla usługi testu użyć:

http: 
    port: 7000 
    adminPort: 7001 

Prosta klasa test, który sprawdza, czy istnieje zasób w miejscu „/ żądanie” wygląda następująco:

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)); 
    } 
} 

Dodałem również import, jeśli nie wiesz, jaką implementację wybrać.

import com.google.common.io.Resources; 
import com.sun.jersey.api.client.Client; 
import com.sun.jersey.api.client.ClientResponse; 
import com.yammer.dropwizard.testing.junit.DropwizardServiceRule; 
import org.junit.ClassRule; 
import org.junit.Test; 
import org.junit.rules.TestRule; 

import static org.hamcrest.core.Is.is; 
import static org.junit.Assert.assertThat; 

Po zakończeniu testów serwer zostanie zamknięty z rozwagą, więc nie musisz się tym martwić.

0

Albo użyć tej funkcji w java/głównego konstruktora ...:

// 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

Przechowywać zmienną environment się i dodaj następującą metodę aplikacji:

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

Teraz możesz zadzwoń pod numer myService.stop(), aby zatrzymać serwer.

+0

Znalazłem to bardzo przydatne, aby zatrzymać aplikację DW, jeśli działa jako usługa Windows (na przykład za pomocą Apache Commons Daemon). –