2016-03-29 17 views
0

Ich folge this tutorial und habe den Testteil erreicht. Wenn ich die HelloControllerTest Datei sowie eine HelloControllerIT Datei in meinem Testverzeichnis bei src/test/java/hello/ erzeuge, läuft nur der HelloControllerTest Test. Wenn ich die zweite Datei jedoch so umbenenne, dass sie mit dem Wort Test endet, z. B. HelloController2Test, wird sie ebenfalls ausgeführt. Ich führe die Tests von der Befehlszeile während des Maven-Builds mit mvn clean verify aus. Ich betreibe Maven 3.3.9 unter OSX.Wie sagt man Maven, welche Tests ausgeführt werden sollen?

Ich habe zwei Hauptfragen: Woher weiß Maven, welche Tests ausgeführt werden? Und, noch wichtiger, wie kann ich Maven sagen, dass er andere Tests durchführen soll?

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>org.springframework</groupId> 
    <artifactId>gs-spring-boot</artifactId> 
    <version>0.1.0</version> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.3.3.RELEASE</version> 
    </parent> 

    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 

    <properties> 
     <java.version>1.8</java.version> 
    </properties> 


    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
     </plugins> 
    </build> 

</project> 

Antwort

2

Die maven-surefire-plugin wird, by default, versuchen alle Tests auszuführen, die das Muster folgen von Test*.java oder *Test.java oder *TestCase.java. Es ignoriert Ihre HelloControllerIT sehr absichtlich, wie von Standard Maven Konvention, die keine Einheit Test ist, ist es eine Integration Test. Das Maven-Surefire-Plugin ist standardmäßig in allen Maven-Projekten aktiviert.

Es gibt ein separates Plugin, maven-failsafe-plugin, verwendet Integrationstests ausgeführt werden, bezeichnet (by default) durch das Namensmuster IT*.java oder *IT.java oder *ITCase.java. Es läuft während der integration-test Phase des Builds statt der test Phase. Im Gegensatz zu maven-surefire-plugin musst du es explizit aktivieren. (Ich weiß nicht, warum das so ist.)

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-failsafe-plugin</artifactId> 
    <version>2.19.1</version> 
    <executions> 
     <execution> 
     <goals> 
      <goal>integration-test</goal> 
      <goal>verify</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 

Add Maven-Fail-safe-Plugin, um Ihr Projekt und Ihr Integrationstest sollte gut laufen.

0

1) wie funktioniert Maven wissen, welche Tests ausführen zu: Unten ist mein pom.xml, direkt aus dem tutorial genommen? Standardmäßig führt Maven alle Tests aus. Ich meine, alle testen, dass Maven findet.

2) Wie sage ich Maven, andere Tests durchzuführen? Um einen bestimmten Testklasse ausführen (. ZB HelloController2Test), können Sie dies tun:

mvn -Dtest=HelloController2Test test 

Reference doc here

One other explanation(from the well known site MKYong)

Verwandte Themen