Подтвердить что ты не робот

Unit test сервлет со встроенным приложением

Как мы можем unit test создать сервлет со встроенным сервером Jetty?

Например, как проверить метод сервлета ниже?

protected void doGet(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
    //any logic inside
}
4b9b3361

Ответ 1

Я очень предпочитаю тестировать сервлеты со встроенным экземпляром причала, используя что-то вроде junit для его загрузки.

http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/tree/examples/embedded/src/main/java/org/eclipse/jetty/embedded/MinimalServlets.java

это минимальный пример того, как это сделать.

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

Для конкретного сервлета или обработчика мы часто используем причал-клиенту или SimpleRequest в артефакте артефакта-приятеля. Также работает URLConnection.

http://git.eclipse.org/c/jetty/org.eclipse.jetty.toolchain.git/tree/jetty-test-helper/src/main/java/org/eclipse/jetty/toolchain/test/SimpleRequest.java

Вот тест на причале, это для причала-9, поэтому, если вам нужно 7 или 8, то посмотрите под соответствующим тегом, он был реорганизован совсем немного в причале-9.

http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/tree/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientTest.java

Примечание. Я рекомендую вам передать 0 в качестве порта для причала для запуска, и это даст вам случайный открытый порт, который вы можете вытащить из пристани для тестирования, это позволяет избежать ситуации, когда несколько сборок работают на CI или параллельные сборки, где может быть конфликт портов.

Ответ 2

Вам не нужна Jetty для проверки сервлета, вам нужна инфраструктура модульного тестирования, такая как JUnit, Mockito, JMock, и др.

Вообще говоря, вы не хотите использовать контейнер сервлетов, когда вы проводите модульное тестирование, потому что хотите сосредоточить свой тест на тестируемом фактическом методе, имея причал в пути, означает, что вы также проверяете поведение причала. После выполнения всех ваших модульных тестов вы можете перейти к интеграционным тестам и системным тестам, и эта часть может включать внешние системы, такие как причал (с использованием систем автоматизации, таких как Selenium.)

Я использую Mockito и PowerMock для выполнения моего модульного тестирования, вы можете проверить этот код для рабочего примера реального онлайн-сервиса (который вы можете найти здесь). Я написал учебник об этой службе и том, что она содержит, это можно найти здесь.

[Добавлено время от времени получая downvotes от этого ответа]: и, рискуя получить еще больше downvotes, все ваши downvoters должны прочитать определение UNIT TESTING, прежде чем нажать кнопку -1. Вы просто не знаете, о чем говорите.