Da festgestellt wurde, dass der Integrationstest mithilfe des Maven Failsafe Plugin automatisiert werden kann, wird er als Memorandum bezeichnet.
--Erstellen Sie ein Maven-Projekt mit dem folgenden Maven-Archetyp
pom.xml
<dependencies>
<!-- Servlet API -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!--Klient-->
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.28</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.inject</groupId>
<artifactId>jersey-hk2</artifactId>
<version>2.28</version>
<scope>test</scope>
</dependency>
<!-- JUnit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
DemoServlet.java
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/demo")
public class DemoServlet extends HttpServlet {
private static final long serialVersionUID = 2564544155028547344L;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.getWriter().println("body");
}
}
DemoFilter.java
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
@WebFilter("/demo")
public class DemoFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper((HttpServletResponse) response);
wrapper.setHeader("Header-Name", "value");
chain.doFilter(request, wrapper);
}
@Override
public void destroy() {
}
}
DemoIT.java
import static org.junit.Assert.assertEquals;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.core.Response;
import org.junit.Test;
public class DemoIT {
@Test
public void test() {
//Anfrage an Server senden
Response response = ClientBuilder.newClient().target("http://localhost:8080/sample-it/demo").request().get();
//Stellen Sie sicher, dass der Filter wie erwartet funktioniert
assertEquals("value", response.getHeaderString("Header-Name"));
//Stellen Sie sicher, dass das Servlet wie erwartet funktioniert
assertEquals("body", response.readEntity(String.class).trim());
}
}
später,
--Starten Sie den Anwendungsserver
Machen Sie den Prozess automatisch entsprechend dem Ablauf von ausgeführt.
Verwenden Sie dazu das Failsafe-Plug-In. (Das ausfallsichere Plug-In ist ein Plug-In, das die Testausführung steuern kann. Sie können die Vor- und Nachbearbeitung der Testausführung wie oben beschrieben definieren.) Da Sie den Server nicht starten oder die Anwendung nicht mit dem Failsafe-Plug-In bereitstellen können, Verwenden Sie das Apache Tomcat Maven-Plugin. Folgendes ist eingestellt.
pom.xml
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>3.0.0-M3</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
<!--Plugin für den Betrieb von Tomcat-->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<executions>
<!--Vorverarbeitung der Testausführung-->
<execution>
<id>run</id>
<phase>pre-integration-test</phase>
<goals>
<!--Starten Sie die Tomcat / Deploy-Anwendung-->
<goal>run</goal>
</goals>
<!--Einstellungen, um die Ausführung von Zielen nach dem Lauf zu ermöglichen-->
<configuration>
<fork>true</fork>
</configuration>
</execution>
<!--Verarbeitung nach dem Test-->
<execution>
<id>shutdown</id>
<phase>post-integration-test</phase>
<goals>
<!--Tomcat blieb stehen-->
<goal>shutdown</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Der Test kann durch Ausführen des folgenden Befehls durchgeführt werden.
mvn clean verify
Bei Spring Boots scheint SprintBootTest in der Lage zu sein, Integrationstests zu automatisieren, sodass es sich möglicherweise nicht lohnt, das Failsafe-Plug-In zu verwenden. Für Anwendungen wie Spring MVC, die auf einem Server bereitgestellt werden müssen, kann dieses Plug-In jedoch zur Automatisierung verwendet werden. Es scheint verwendbar zu sein, wenn es viele Spezifikationsänderungen gibt, wie z. B. agil.
Recommended Posts