Модульный тест сервлетов

В настоящее время я использую среду TestNG для тестирования бизнес-логики приложения, недавно я добавил несколько классов сервлетов.

Как мне выполнить модульное тестирование этих классов сервлетов в среде TestNg?

3 ответа

Решение

Следуйте советам скаффмана, если это возможно. Если нет, или если вы хотите проверить поведение сервлетов в качестве внешних контроллеров, а не бизнес-логику внутри них, вы можете использовать:

Одним из самых простых способов является ServletTester от Jetty. Все делается во встроенном Jetty автоматически, поэтому во время тестирования порт не открывается! Если вы используете Maven, то для включения этого метода потребуется следующий артефакт:

<dependency>
  <groupId>org.mortbay.jetty</groupId>
  <artifactId>jetty-servlet-tester</artifactId>
  <version>6.1.16</version>
  <scope>test</scope>
</dependency>

Пример:

Подготовить ServletTester

ServletTester tester=new ServletTester(); 
tester.addServlet(HelloServlet.class, "/hello"); 
tester.start();

Создать HTTP-запрос

HttpTester request = new HttpTester(); 
request.setMethod("GET");
request.setHeader("Host","tester"); 
request.setURI("/hello");
request.setVersion("HTTP/1.0");

Вызвать сервлет и получить ответ:

HttpTester response = new HttpTester();
response.parse(tester.getResponses(request.generate()));

Подтвердите, что вы хотите проверить на ответ и его содержание:

assertEquals(200,response.getStatus()); 
assertEquals("Hello Servlet",response.getContent());

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

Классы API, такие как HttpServletRequest, ServletConfigи т. д., являются основными целями для использования выбранной вами среды для моделирования (JMock, Mockito и т. д.), поскольку все они являются интерфейсами.

Другие вопросы по тегам