Программно запустить Jetty в режиме отладки в контексте Junit4 - PullRequest
0 голосов
/ 21 марта 2012

Для всех наших тестов у нас есть метод, который запускает Jetty Server для публикации и тестирования веб-сервисов:

@Before
public void startJettyAndloadWSDL() throws Exception {
    String port = System.getProperty("jetty.port");
    server = new Server(Integer.valueOf(port));
    WebAppContext webapp = new WebAppContext();
    webapp.setSecurityHandler(getSecurityHandler()); // this is a local function in my test
    webapp.setContextPath("/");
    webapp.setWar(System.getProperty("jetty.war"));
    server.setHandler(webapp);
    // Is there an option somewhere to say "start Jetty in Debug mode"?
    server.start();
    service = new MyServiceToTest(new URL("http://127.0.0.1:" + port + "/WS/MyServiceToTest/1?WSDL"), 
        new QName("urn:myservicetotest.services.mycompany.com/1", "MyService")).getMyServicePort();
}

Можно ли сказать, что Jetty запускается в режиме отладки,точка останова в Eclipse?

Тест запускается с использованием Maven внешне для Eclipse, тогда, возможно, в этом случае лучше выполнить удаленную отладку?Мы не хотим иметь большую связь с Eclipse, поэтому мы запускаем причал во всех тестах JUnits.

Ответы [ 2 ]

2 голосов
/ 27 марта 2012

Мы не можем изменить встроенный Jetty, потому что он необходим для непрерывной интеграции, и мы не будем поддерживать две версии тестов JUnit (автоматический или ручной).

Решения, которые я нашел:

1 - Из maven с удаленной отладкой:

Запустите тест со следующей командой (с сайта maven):

mvn -Dmaven.surefire.debug="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -Xnoagent -Djava.compiler=NONE" test

, а затем запустите удаленную отладку Eclipse напорт 8000. Но это решение не очень умное: так как пристань встроена, я должен вручную запустить удаленную отладку Eclipse, и ему требуется некоторая синхронизация, когда я запускаю maven из командной строки (maven не интегрирован для затмения в этом проекте).

Лучший способ, который мы наконец-то используем:

2 - из Eclipse Junit

Я просто выполняю тест Junit из Eclipse в режиме отладки, и этопросто идеально: метод запуска Jetty не требует никакой опции для debug mode, так как именно JVM запускается в режиме выполнения или в режиме отладки.

Мне не нужно использовать WTP jetty в Eclipse, япросто нужно было определить свойства в тесте следующим образом:

${jetty.port} 

и точка останова останавливается там, где я хочу.

Единственная конфигурация в Eclipse, и она не изменит наш код.

1 голос
/ 23 марта 2012

Обычно есть два контекста, в которых тесты запускаются 1) как часть сборки, чтобы гарантировать, что новая сборка не провалит любые тесты, и 2) при разработке, чтобы гарантировать, что небольшая часть функциональности работает, прежде чем двигаться вперед.

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

Я думаю, что вы захотите удалить запуск Jetty из вашего тестового кода и, чтобы обработать контекст # 1, разрешить maven запустить Jetty на этапе предварительного тестирования интеграции и запустить тесты, которые требуют Jetty в тесте интеграции фаза. Это очень распространенный способ запуска тестов, для которых требуется веб-сервер.

При работе в контексте # 2 запустите встроенную Jetty в Eclipse в режиме отладки, а затем запустите тест из Eclipse вместо Maven.

...