Я посмотрел опубликованные ответы и подумал, что опубликую более полное решение, которое фактически демонстрирует, как проводить тестирование с использованием встроенного GlassFish и его плагина Apache Maven.
Я написал полный процесс в своем блоге Использование GlassFish 3.1.1, встроенного в JUnit 4.x и HtmlUnit 2.x , и разместил полный проект для загрузки на Bitbucket здесь: image- сервлет
Я просматривал другой пост в сервлете изображений для тегов JSP / JSF непосредственно перед тем, как увидел этот вопрос. Таким образом, я объединил решение, которое использовал из другого поста, с полной версией для этого поста, протестированной на модуле.
Как проверить
Apache Maven имеет четко определенный жизненный цикл, включающий test
. Я буду использовать это вместе с другим жизненным циклом integration-test
для реализации моего решения.
- Отключите стандартное тестирование жизненного цикла в плагине surefire.
- Добавить
integration-test
как часть выполнения плагина surefire
- Добавьте плагин GlassFish Maven в POM.
- Настройка GlassFish для выполнения в течение жизненного цикла
integration-test
.
- Запуск юнит-тестов (интеграционных тестов).
Плагин GlassFish
Добавьте этот плагин как часть <build>
.
<plugin>
<groupId>org.glassfish</groupId>
<artifactId>maven-embedded-glassfish-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<!-- This sets the path to use the war file we have built in the target directory -->
<app>target/${project.build.finalName}</app>
<port>8080</port>
<!-- This sets the context root, e.g. http://localhost:8080/test/ -->
<contextRoot>test</contextRoot>
<!-- This deletes the temporary files during GlassFish shutdown. -->
<autoDelete>true</autoDelete>
</configuration>
<executions>
<execution>
<id>start</id>
<!-- We implement the integration testing by setting up our GlassFish instance to start and deploy our application. -->
<phase>pre-integration-test</phase>
<goals>
<goal>start</goal>
<goal>deploy</goal>
</goals>
</execution>
<execution>
<id>stop</id>
<!-- After integration testing we undeploy the application and shutdown GlassFish gracefully. -->
<phase>post-integration-test</phase>
<goals>
<goal>undeploy</goal>
<goal>stop</goal>
</goals>
</execution>
</executions>
</plugin>
Плагин Surefire
Добавить / изменить плагин как часть <build>
.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12.4</version>
<!-- We are skipping the default test lifecycle and will test later during integration-test -->
<configuration>
<skip>true</skip>
</configuration>
<executions>
<execution>
<phase>integration-test</phase>
<goals>
<!-- During the integration test we will execute surefire:test -->
<goal>test</goal>
</goals>
<configuration>
<!-- This enables the tests which were disabled previously. -->
<skip>false</skip>
</configuration>
</execution>
</executions>
</plugin>
HtmlUnit
Добавьте интеграционные тесты, как в примере ниже.
@Test
public void badRequest() throws IOException {
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
webClient.getOptions().setPrintContentOnFailingStatusCode(false);
final HtmlPage page = webClient.getPage("http://localhost:8080/test/images/");
final WebResponse response = page.getWebResponse();
assertEquals(400, response.getStatusCode());
assertEquals("An image name is required.", response.getStatusMessage());
webClient.getOptions().setThrowExceptionOnFailingStatusCode(true);
webClient.getOptions().setPrintContentOnFailingStatusCode(true);
webClient.closeAllWindows();
}
Я написал полный процесс в своем блоге Использование GlassFish 3.1.1, встроенного в JUnit 4.x и HtmlUnit 2.x , и разместил полный проект для загрузки на Bitbucket здесь: image- сервлет
Если у вас есть какие-либо вопросы, пожалуйста, оставьте комментарий. Я думаю, что это один полный пример, который вы можете использовать в качестве основы для любого тестирования сервлетов, которое вы планируете.