I am using Maven to build my project. I currently split testing into different hierarchies:
src/test/java/**/*Test.java
src/test-integration/java/**/*Test.java
src/test-external/java/**/*Test.java
Here is my maven-surefire-plugin
section:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<includes>
<include>src/test/java/**/*Test.java</include>
</includes>
</configuration>
</plugin>
The <include>
directive above does not work. No tests are executed when I run: mvn clean test
I tried **/*Test.java
and it runs all the tests -- unit, integration, and external. However, for the default test suite, I only want to run the unit tests.
How can I make this work in Maven?
Ref:
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.14.1</version>
You should separate your unit and integration test cases. Unit tests can be run using Surefire plugin and there is a separate plugin called Failsafe for running integration tests.
Surefire plugin by default runs all test files whose name ends with *Test.java
. The trick is to name your integration test files with a different name, say *IT.java
. Failsafe plugin will identify them as integration tests.
You can find a sample usage in this answer - How do I get my Maven Integration tests to run
Also you dont have to separately configure Surefire plugin if you follow the default setup like putting your test case files in src/test/java
folder and name your test files as *Test.java
.