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>
When the Surefire plugin reaches the test goal, it will skip the unit tests if the maven. test. skip properties is set to true . Another way to configure Maven to skip unit tests is to add this configuration to your project's pom.
The Surefire Plugin is used during the test phase of the build lifecycle to execute the unit tests of an application. It generates reports in two different file formats: Plain text files ( *. txt )
How to run all the test files and trigger test using maven-surefire plugin.
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
.
This is because <include>
path is relative to <testSourceDirectory>
which defaults to ${project.build.testSourceDirectory}
= src/test/java. Try this
<include>**/*Test.java</include>
Would it be easier to use an exclusion rather than the inclusion?
<excludes>
<exclude>test-integration/**/*</exclude>
<exclude>test-external/**/*</exclude>
</excludes>
Or something like that?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With