В настоящее время я использую платформу 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
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
и т. Д., Являются основными целями для использования фреймворка mocking по вашему выбору (JMock, Mockito и т. Д.), Поскольку все они интерфейсы.