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>
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>
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>
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
È possibile aggiungere alcuni test di esempio? Forse un UT e IT. Mi chiedo se il loro nome/organizzato/annotato sia parte del problema. –
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
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