Сервлеты модульного тестирования [закрыты]
-
09-06-2019 - |
Вопрос
У меня есть куча сервлетов, запущенных под контейнером сервлетов Tomcat.Я хотел бы отделить тестовый код от производственного, поэтому я решил использовать тестовый фреймворк.JUnit прекрасно интегрирован в Eclipse, но мне не удалось заставить его запускать сервлеты, используя работающий сервер Tomcat.Не могли бы вы, пожалуйста, порекомендовать платформу модульного тестирования, которая поддерживает тестирование сервлетов Tomcat?Интеграция с Eclipse приятна, но не обязательна.
Решение
Проверьте Сервлет- модуль, который является частью HttpUnit.В двух словах, ServletUnit предоставляет библиотеку макетов и утилит, которые вы можете использовать в обычных тестах JUnit для макета контейнера сервлета и других объектов, связанных с сервлетом, таких как объекты запроса и ответа.Приведенная выше ссылка содержит примеры.
Другие советы
Spring Framework имеет хорошие готовые макетные объекты для нескольких классов из Servlet API:
Ладно.Игнорируя бит 'tomcat' и кодирование для сервлета, лучше всего создать mocks для объектов response и request, а затем сообщить ему, чего вы от него ожидаете.
Итак, для стандартного пустого допоста и использования Легкий доступ, у вас будет
public void testPost() {
mockRequest = createMock(HttpServletRequest.class);
mockResponse = createMock(HttpServletResponse.class);
replay(mockRequest, mockResponse);
myServlet.doPost(mockRequest, mockResponse);
verify(mockRequest, mockResponse);
}
Затем начните добавлять код в doPost.Макеты потерпят неудачу, потому что у них нет ожиданий, и тогда вы сможете настроить ожидания оттуда.
Обратите внимание, что если вы хотите использовать EasyMock с классами, вам придется использовать библиотеку расширений классов EasyMock.Но с этого момента все будет работать точно так же.
Отделите части этого кода, которые имеют дело с HTTP-запросами и ответами, от частей, которые выполняют бизнес-логику или манипулирование базой данных.В большинстве случаев это приведет к созданию трехуровневой архитектуры с уровнем данных (для базы данных / сохраняемости), уровнем сервиса (для бизнес-логики) и уровнем представления (для HTTP-запросов и ответов).
- Вы можете модульно протестировать первые два уровня вообще без каких-либо элементов сервлета;таким образом, будет легче протестировать.
- Вы можете протестировать уровень презентации, как предполагают другие, используя фиктивные объекты HTTP-запроса и ответа.
- Наконец, если вы чувствуете, что это действительно необходимо, вы можете выполнять интеграционные тесты, используя инструмент, такой как HtmlUnit - модуль HtmlUnit или Веб- модуль .
Для тестирования "в контейнере" взгляните на Кактус
Если вы хотите иметь возможность тестировать без запущенного контейнера, вы можете либо смоделировать его компоненты с помощью ваших собственных mockobjects (напримерс Легкий доступ) или вы могли бы попробовать Макет бегуна который имеет "предопределенные" заглушки для тестирования сервлетов, jdbc-соединений и т.д.
Обновлено в феврале 2018 года: OpenBrace Limited закрылась, и его ObMimic-продукт больше не поддерживается.
Если вам нужна более новая альтернатива ServletUnit для тестирования сервлетов JUnit, вы можете найти у моей компании Обмимический полезная библиотека.Это доступно бесплатно на сайте Загрузки Страница.
Как и в случае с ServletUnit, он предоставляет библиотеку классов, которые вы можете использовать в обычных тестах JUnit или TestNG вне любого контейнера сервлетов для имитации Servlet API.
Его объекты Servlet API имеют конструкторы без аргументов, полностью настраиваются и проверяются на наличие всех соответствующих данных и настроек Servlet API и обеспечивают полное моделирование всего поведения, заданного javadoc в Servlet API.Чтобы помочь с тестированием, поддерживается выборочная запись вызовов Servlet API, контроль над любым зависящим от контейнера поведением, проверки на наличие любых неоднозначных вызовов (т.Е.где поведение API сервлета не определено полностью), и моделирование JNDI в памяти для любого кода сервлета, который полагается на поиск в JNDI.
Для получения полной информации, примера кода, руководств "как это сделать", Javadoc и т.д. Смотрите веб-сайт.