UT = tests unitaires IT = tests d'intégration. Toutes mes classes de test d'intégration sont annotées avec @Category (IntegrationTest.class)
Mon but est:
mvn clean install
=> exécute UT et non IT
mvn clean install
-DskipTests = true => aucun test n'est exécuté
mvn clean deploy
=> exécute UT et non IT
mvn clean test
=> exécute UT et non IT
mvn clean verify
=> s'exécute UT et IT
mvn clean integration-test
=> exécute l'informatique et UT ne sont pas exécutés
mvn clean install deploy
=> exécute UT et non IT
propriétés du pom:
<junit.version>4.12</junit.version>
<surefire-plugin.version>2.18.1</surefire-plugin.version>
<failsafe-plugin.version>2.18.1</failsafe-plugin.version>
Compilateur:
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
Tests unitaires:
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${surefire-plugin.version}</version>
<configuration>
<excludedGroups>com.xpto.IntegrationTest</excludedGroups>
</configuration>
</plugin>
Tests d'intégration:
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${failsafe-plugin.version}</version>
<configuration>
<groups>com.xpto.IntegrationTest</groups>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
</goals>
<configuration>
<includes>
<include>**/*.class</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
Mes résultats sont:
mvn clean install
=> OK
mvn clean install
-DskipTests = true => OK
mvn clean deploy
=> exécute UT et non IT
mvn clean test
=> OK
mvn clean verify
=> NOK ... seulement UT sont exécutés mais IT doit également être exécuté
mvn clean integration-test
=> NOK ... UT sont exécutés et ne devraient pas l'être et l'informatique n'est pas exécutée mais doit être exécutée
mvn clean install deploy
=> OK
La solution est la suivante:
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
</plugin>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.19.1</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>${surefire.skip}</skip>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
Cela vous permettra de contrôler ce qui est exécuté.
en cours d'exécution UT et IT:
mvn clean verify
courir IT mais PAS UT
mvn clean verify -Dsurefire.skip=true
en cours d'exécution UT mais pas les TI:
mvn clean verify -DskipITs=true
Vous devez suivre les conventions de dénomination des plugins ce qui vous facilite la vie.
Conventions de dénomination pour maven-surefire-plugin (tests unitaires). Conventions de dénomination pour maven-fail-safe-plugin (tests d'intégration).