2013-04-13 3 views

ответ

1

вы можете попробовать использовать метод stop() для org.eclipse.jetty.server.Server, который внутренне используется Dropwizard.

+0

Не могли бы вы указать мне пример кода? Я не понимаю, как это сделать. – Neo

12

Вы можете запустить сервис в новой ветке, как только тест завершится, служба автоматически отключится.

Однако, начиная с dropwizard 0.6.2, модуль тестирования dropwizard содержит junit rule именно для этого варианта использования (see here).

Использование этого правила будет выглядеть примерно так:

Class MyTest { 

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

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

Почему они не задокументировали этот класс? (риторический) Как вы узнали об этом, @LiorH? (не риторический) – DavidS

+0

Да, это странно, что это не задокументировано, надеюсь, что его не удастся удалить. Кто-то за работой указал мне этот класс, не знаю, как он его нашел. – LiorH

+0

Привет @LiorH - рад видеть вас здесь! Очень полезно;) – Galz

3

Спасибо @LiorH за это большое предложение.

Вот полный класс испытаний с использованием DropwizardServiceRule в dropwizard-0.6.2.

Сначала создайте конфигурацию службы для тестирования: testing-server.yml и поместите ее в путь класса теста (например, src\test\resources). Таким образом, вы можете установить различные порты для испытания службы для использования:

http: 
    port: 7000 
    adminPort: 7001 

Простой тест класс, который проверяет, есть ли ресурс на месте «/ запроса» выглядит следующим образом:

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

Я также добавил импорт, если вы не знаете, какую реализацию выбрать.

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; 

В конце испытаний, будет отключен сервер корректно, так что вам не нужно беспокоиться об этом.

0

Или использовать эту функцию Java в главном/конструктору ...:

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

Держите переменную environment вокруг и добавьте следующий метод к приложению:

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

Теперь вы можете звоните myService.stop(), чтобы остановить сервер.

+0

Мне было очень полезно остановить приложение DW, если оно работает как служба Windows (например, с помощью Apache Commons Daemon). –

Смежные вопросы