16

UT = Tests unitaires IT = Tests d'intégration. Toutes mes classes de test d'intégration sont annotés avec @Category (IntegrationTest.class)Maven Tests de test et d'intégration d'unités séparées

Mon but est:

mvn clean install => UT court et pas

mvn clean install -DskipTests = true => pas de tests sont exécutés

mvn clean deploy => UT court et pas

mvn clean test => UT court et pas

mvn clean verify => court UT et IT

mvn clean integration-test => IT fonctionne et UT ne sont pas exécutées

mvn clean install deploy => court UT et pas

propriétés 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> 
  1. 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> 
    
  2. 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> 
    
  3. 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 les suivants:

mvn clean install => OK

mvn clean install -DskipTests = true => OK

mvn clean deploy => UT court et pas

mvn clean test => OK

mvn clean verify => NOK ... UT ne sont exécutés, mais elle doit également être exécuté

mvn clean integration-test => NOK ... UT sont exécutées et ne doivent pas et IT ne sont pas exécutées, mais doivent être exécutés

mvn clean install deploy => OK

+0

Est-il possible pour vous d'ajouter quelques exemples de tests? Peut-être un UT et IT. Je me demande si la façon dont ils sont nommés/organisés/annotés fait partie du problème. –

+1

Au moins une partie de vos exigences ne sera probablement pas faisable ... vous dites que "mvn clean integration-test" devrait fonctionner IT et * not * UT, mais le cycle de vie de maven est une chaîne ... quand vous exécutez 'mvn integration- test' il passe par generate-sources, compile, compile-test, test, paquet, etc tout le chemin jusqu'à et y compris l'intégration-test. Votre UT devrait être super rapide de toute façon, alors pourquoi voudriez-vous les ignorer? – dcsohl

+0

D'abord je suggère d'utiliser la convention de nommage correcte pour nommer un test unitaire '* Test.java' et des tests d'intégration' * IT.java' (voir les documents de maven-surefire-plugin/maven-failsafe-plugin). De plus, si vous faites une chose comme ceci: 'mvn clean install deploy' cela n'a pas de sens et n'a pas compris le cycle de vie de la construction maven. Si vous faites 'mvn deploy', l'installation fait partie du cycle de vie, ce qui signifie simplement' mvn deploy'. Si un appel 'mvn clean deploy' va exécuter votre UT mais pas IT, votre configuration est erronée. – khmarbaise

Répondre

18

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 qui est exécuté.

course UT et IT:

mvn clean verify 

en cours d'exécution IT mais pas UT de

mvn clean verify -Dsurefire.skip=true 

UT en cours d'exécution, mais pas est:

mvn clean verify -DskipITs=true 

Vous devez suivre les conventions de nommage des plugins qui rend la vie plus facile.

Naming conventions pour maven-surefire-plugin (tests unitaires). Naming conventions pour maven-failsafe-plugin (tests d'intégration).

+0

Cela fonctionne parfaitement maintenant. Mais maintenant mes tests d'intégration ne sont pas interceptés par le plugin cobertura. Toute suggestion? Peut-être utiliser JaCoCo à la place? – Leonel

+0

Pour [cobertura-maven-plugin] (http://www.mojohaus.org/cobertura-maven-plugin/) je suggère de regarder dans la documentation de vous pouvez utiliser JaCoCo? ... – khmarbaise

+0

Question connexe http://stackoverflow.com/questions/33349864/merging-integration-and-unit-test-reports-with-jacoco – Leonel