1. Maven surefire plugin
Maven uses this plugin by default for all test runs. So no special configuration is needed to run unit tests. This is what needs to be added for integration tests:
<build>
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugin</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<!-- at first, all integration tests need to be explicitly excluded
from all test executions, be it test phase
or any other phase where maven-surefire-plugin is invoked
on a custom basis.
-->
<excludes>
<exclude>**/*IntegrationTest.java</exclude>
</excludes>
</configuration>
<executions>
<execution>
<id>integration-test</id>
<goals>
<goal>test</goal>
</goals>
<phase>integration-test</phase>
<configuration>
<!-- Here integration tests are included
at the integration-test phase separately.
-->
<includes>
<include>**/*IntegrationTest.java</include>
</includes>
<!-- a parameter called 'skipIntegration' is
the same as 'skipTests' except only
for integration tests -->
<skipTests>${skipIntegration}</skipTests>
</configuration>
</execution>
</executions>
</plugin>
...
</plugins>
</build>
2. Maven failsafe plugin
This maven plugin includes integration test classes whose names fit '*IT' or '*ITCase' patterns and executes them during integration-test phase. If classes are named that way, then it's enough to simply throw in default maven-failsafe-plugin configuration. However, if classes are named using '*IntegrationTest' pattern, then they have to be excluded from test phase in maven-surefire-plugin configuration, and that pattern has to be defined in maven-failsafe-plugin configuration:
<build>
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugin</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludes>
<exclude>**/*IntegrationTest.java</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<configuration>
<includes>
<include>**/*IntegrationTest.java</include>
</includes>
<skipTests>${skipIntegration}</skipTests>
</configuration>
<executions>
<execution>
<id>integration-test</id>
<phase>integration-test</phase>
<goals>
<goal>integration-test</goal>
</goals>
</execution>
<execution>
<id>verify</id>
<phase>verify</phase>
<goals>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
...
</plugins>
</build>
No comments:
Post a Comment