Сервлеты для тестирования модулей - программирование
Подтвердить что ты не робот

Сервлеты для тестирования модулей

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

4b9b3361

Ответ 1

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

Ответ 3

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

Ответ 4

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

  • Вы можете unit test первыми двумя слоями без каких-либо материалов сервлетов; это будет легче протестировать таким образом.
  • Вы можете протестировать уровень презентации как предлагают другие, используя макеты HTTP-запросов и объектов ответа.
  • Наконец, если вы считаете, что это действительно необходимо, вы можете выполнить интеграционные тесты, используя слишком, например, HtmlUnit или JWebUnit.

Ответ 5

Для тестирования "внутри контейнера" посмотрите Cactus

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

Ответ 6

Если вам нужна более новая альтернатива ServletUnit для тестирования сервлетов JUnit, вы можете найти мою полезную библиотеку ObMimic. Он доступен бесплатно на странице downloads.

Как и в ServletUnit, он предоставляет библиотеку классов, которые можно использовать в обычных тестах JUnit или TestNG за пределами любого контейнера сервлета для имитации API сервлета.

В его объектах API сервлета нет конструкторов без аргументов, они полностью настраиваются и проверяются для всех соответствующих данных и параметров сервлета API и обеспечивают полное моделирование всего поведения, заданного javadoc сервлета API. Чтобы помочь в тестировании, есть поддержка выборочной записи вызовов Servlet API, управления любым зависящим от контейнера поведением, проверяет любые неоднозначные вызовы (т.е. Когда поведение Servlet API не полностью определено) и синтаксическое моделирование JNDI в памяти для любого сервлет-код, основанный на поиске JNDI.

Для получения полной информации см. пример кода, руководства "как", Javadoc и т.д., на веб-сайте.