2008-09-10 6 views
14

У меня есть куча сервлетов, работающих под контейнером сервлетов Tomcat. Я хотел бы отделить тестовый код от производственного кода, поэтому я решил использовать тестовую структуру. JUnit хорошо интегрирован в Eclipse, но мне не удалось запустить сервлеты с помощью запущенного сервера Tomcat. Не могли бы вы рекомендовать платформу тестирования модулей, которая поддерживает тестирование сервлетов Tomcat? Интеграция Eclipse хороша, но не нужна.Сервлеты для тестирования модулей

+0

Я использую jUnit для запуска контейнера сервлетов Jetty. До и после выключения после. – LeeGee 2014-01-21 16:45:48

ответ

9

Отъезд ServletUnit, который является частью HttpUnit. В двух словах ServletUnit предоставляет библиотеку mocks и утилит, которые вы можете использовать в обычных тестах JUnit для извлечения контейнера сервлета и других объектов, связанных с сервлетом, таких как объекты запроса и ответа. В приведенной выше ссылке содержатся примеры.

+2

Проект HttpUnit, похоже, не работал с 2008-05 года. Возможно, он мертв? – Raedwald 2013-06-10 12:12:04

5

Хорошо. Игнорируя бит «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. Но с тех пор это будет работать так же.

1

Для тестирования «в-контейнера», посмотреть на Cactus

Если вы хотите, чтобы быть в состоянии проверить без запущенного контейнера вы можете моделировать его компоненту с собственным mockobjects (например, с EasyMock) или мог попробовать MockRunner, который имеет «предварительно определенные» шлейфы для тестирования сервлетов, jdbc-соединений и т. д.

+0

«2011/08/05 - Кактус Джакарты был уволен». – Raedwald 2013-06-10 12:12:54

2

Отдельные части этого кода, которые имеют дело с HTTP-запросов и ответа из частей, которые делают бизнес логики или базы данных. В большинстве случаев это создаст трехуровневую архитектуру с уровнем данных (для базы данных/персистентности), уровня обслуживания (для бизнес-логики) и уровня представления (для HTTP-запросов и ответов).

  1. Вы можете выполнить тестирование первых двух слоев без каких-либо материалов сервлетов; это будет легче протестировать таким образом.
  2. Вы можете протестировать уровень представления, as others suggest, используя макет объектов HTTP-запроса и ответа.
  3. И, наконец, если вы считаете, что это действительно необходимо, вы можете выполнить интеграционные тесты, используя HtmlUnit или JWebUnit.
0

Обновлено 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 и т. Д. См. На веб-сайте.