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

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

Как делают меня модульный тест эти классы Сервлета в платформе TestNg?

5
задан skaffman 3 April 2010 в 10:11
поделиться

3 ответа

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

6
ответ дан 18 December 2019 в 05:36
поделиться

Один из самых простых способов - это 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());
18
ответ дан 18 December 2019 в 05:36
поделиться

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

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

8
ответ дан 18 December 2019 в 05:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: