16

UT = Test unità IT = Test di integrazione. Tutte le mie classi di test di integrazione sono annotati con @Category (IntegrationTest.class)Test unità separati e test di integrazione

Il mio obiettivo è:

mvn clean install => corre UT e non IT

mvn clean install -DskipTests = true => nessun test sono eseguiti

mvn clean deploy => corre UT e non IT

mvn clean test => corre UT e non IT

mvn clean verify => corre UT e IT

mvn clean integration-test => IT corre e UT non vengono eseguiti

mvn clean install deploy => corre UT e non IT

proprietà 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. Compilatore:

    <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. unit test:

    <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. Integration Test:

    <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>   
    

I miei risultati sono:

mvn clean install => OK

mvn clean install -DskipTests = true => OK

mvn clean deploy => corre UT e non IT

mvn clean test => OK

mvn clean verify => NOK ... solo UT vengono eseguiti, ma ha anche bisogno di essere eseguito

mvn clean integration-test => NOK ... UT vengono eseguiti e non deve e non vengono eseguiti, ma deve essere eseguito

mvn clean install deploy => OK

+0

È possibile aggiungere alcuni test di esempio? Forse un UT e IT. Mi chiedo se il loro nome/organizzato/annotato sia parte del problema. –

+1

Probabilmente almeno una parte dei tuoi requisiti non è fattibile ... tu dici "mvn clean integration-test" dovrebbe eseguire IT e * non * UT, ma il ciclo di vita di maven è una catena ... quando esegui l'integrazione di 'mvn- test' gira attraverso generate-sources, compile, compile-test, test, package, ecc fino ad includere test di integrazione. Il tuo UT dovrebbe essere comunque super veloce, quindi perché dovresti saltarli? – dcsohl

+0

Per prima cosa suggerirei di usare la convenzione di denominazione corretta per nominare un test unitario '* Test.java' e test di integrazione' * IT.java' (vedere i documenti di maven-surefire-plugin/maven-failafe-plugin). Inoltre se fai una cosa del genere: 'mvn clean install deploy' questo non ha senso e non ha capito il ciclo di vita del build di maven. Se esegui 'mvn deploy', l'installazione fa parte del ciclo di vita che, in conseguenza, significa solo usare' mvn deploy'. Se una chiamata 'mvn clean deploy' eseguirà il tuo UT ma non IT la tua configurazione è sbagliata. – khmarbaise

risposta

18

La soluzione è questa:

<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> 

Questo vi permetterà di controllare che viene eseguito.

esecuzione UT ed è:

mvn clean verify 

gestire l'IT è, ma non è UT

mvn clean verify -Dsurefire.skip=true 

esecuzione UT, ma non lo è:

mvn clean verify -DskipITs=true 

è necessario seguire le convenzioni di denominazione del plugin che rendono la vita più facile.

Naming conventions per plug-in maven-surefire (test di unità). Naming conventions per plug-in maven-failsafe (test di integrazione).

+0

Funziona perfettamente ora. Ma ora i miei test di integrazione non sono intercettati dal plugin di cobertura. Qualche suggerimento? Forse usando JaCoCo invece? – Leonel

+0

Per [cobertura-maven-plugin] (http://www.mojohaus.org/cobertura-maven-plugin/) suggerirei di esaminare la documentazione di poter utilizzare JaCoCo? ... – khmarbaise

+0

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