У меня есть куча сервлетов, работающих под контейнером сервлетов Tomcat. Я хотел бы отделить тестовый код от производственного кода, поэтому я решил использовать тестовую структуру. JUnit хорошо интегрирован в Eclipse, но мне не удалось запустить сервлеты с помощью запущенного сервера Tomcat. Не могли бы вы рекомендовать платформу тестирования модулей, которая поддерживает тестирование сервлетов Tomcat? Интеграция Eclipse хороша, но не нужна.Сервлеты для тестирования модулей
ответ
Отъезд ServletUnit, который является частью HttpUnit. В двух словах ServletUnit предоставляет библиотеку mocks и утилит, которые вы можете использовать в обычных тестах JUnit для извлечения контейнера сервлета и других объектов, связанных с сервлетом, таких как объекты запроса и ответа. В приведенной выше ссылке содержатся примеры.
Проект HttpUnit, похоже, не работал с 2008-05 года. Возможно, он мертв? – Raedwald 2013-06-10 12:12:04
Хорошо. Игнорируя бит «tomcat» и кодируя сервлет, лучше всего создать макеты для объектов ответа и запроса, а затем рассказать ему, что вы ожидаете от него.
Так что для стандартной пустой doPost, и с помощью EasyMock, вы будете иметь
public void testPost() {
mockRequest = createMock(HttpServletRequest.class);
mockResponse = createMock(HttpServletResponse.class);
replay(mockRequest, mockResponse);
myServlet.doPost(mockRequest, mockResponse);
verify(mockRequest, mockResponse);
}
Затем начните добавлять код в doPost. Москиты потерпят неудачу, потому что у них нет ожиданий, и тогда вы можете установить ожидания оттуда.
Обратите внимание, что если вы хотите использовать EasyMock с классами, вам придется использовать библиотеку расширений класса EasyMock. Но с тех пор это будет работать так же.
Для тестирования «в-контейнера», посмотреть на Cactus
Если вы хотите, чтобы быть в состоянии проверить без запущенного контейнера вы можете моделировать его компоненту с собственным mockobjects (например, с EasyMock) или мог попробовать MockRunner, который имеет «предварительно определенные» шлейфы для тестирования сервлетов, jdbc-соединений и т. д.
«2011/08/05 - Кактус Джакарты был уволен». – Raedwald 2013-06-10 12:12:54
Spring Framework, имеет хорошие готовые макеты объектов для нескольких классов выхода из Servlet API:
Отдельные части этого кода, которые имеют дело с HTTP-запросов и ответа из частей, которые делают бизнес логики или базы данных. В большинстве случаев это создаст трехуровневую архитектуру с уровнем данных (для базы данных/персистентности), уровня обслуживания (для бизнес-логики) и уровня представления (для HTTP-запросов и ответов).
- Вы можете выполнить тестирование первых двух слоев без каких-либо материалов сервлетов; это будет легче протестировать таким образом.
- Вы можете протестировать уровень представления, as others suggest, используя макет объектов HTTP-запроса и ответа.
- И, наконец, если вы считаете, что это действительно необходимо, вы можете выполнить интеграционные тесты, используя HtmlUnit или JWebUnit.
Обновлено Feb 2018: OpenBrace Limited has closed down, а его продукт ObMimic больше не поддерживается.
Если вам нужна более новая альтернатива ServletUnit для тестирования сервлетов JUnit, вы можете найти полезную библиотеку моей компании ObMimic. Он доступен бесплатно с сайта downloads.
Как и в ServletUnit, он предоставляет библиотеку классов, которые можно использовать в обычных тестах JUnit или TestNG вне любого контейнера сервлета для имитации API-интерфейса Servlet.
Объекты API Servlet имеют конструкторы без аргументов, полностью настраиваются и проверяются для всех соответствующих данных и настроек Servlet API и обеспечивают полное моделирование всего поведения, указанного в javadoc API сервлета. Чтобы помочь в тестировании, есть поддержка выборочной записи вызовов Servlet API, управления любым зависящим от контейнера поведением, проверяет любые неоднозначные вызовы (т. Е. Когда поведение API Servlet не полностью определено) и синтаксическое моделирование JNDI в памяти для любых сервлет-код, основанный на поиске JNDI.
Для получения более подробной информации, пример кода, руководства «как», Javadoc и т. Д. См. На веб-сайте.
Я использую jUnit для запуска контейнера сервлетов Jetty. До и после выключения после. – LeeGee 2014-01-21 16:45:48