В настоящее время я использую платформу TestNG для тестирования бизнес-логики приложения, недавно я добавил несколько классов сервлетов.
Как выполнить модульное тестирование этих классов сервлетов в среде TestNg?
В настоящее время я использую платформу TestNG для тестирования бизнес-логики приложения, недавно я добавил несколько классов сервлетов.
Как выполнить модульное тестирование этих классов сервлетов в среде TestNg?
Следуйте совету Скаффмана, если это возможно. Если нет, или если вы хотите протестировать поведение сервлетов как интерфейсных контроллеров, а не бизнес-логику внутри них, вы можете использовать:
Одним из самых простых способов является 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 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 и т. д.), поскольку все они являются интерфейсами.