Using the Maven surefire plugin to include tests
Asked Answered
C

3

17

I am using Maven to build my project. I currently split testing into different hierarchies:

  • Unit tests -> src/test/java/**/*Test.java
  • Integration tests -> src/test-integration/java/**/*Test.java
  • External tests -> 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>
Cygnet answered 19/12, 2013 at 4:12 Comment(0)
L
10

This is because <include> path is relative to <testSourceDirectory> which defaults to ${project.build.testSourceDirectory} = src/test/java. Try this

<include>**/*Test.java</include>
Lillylillywhite answered 19/12, 2013 at 5:17 Comment(0)
D
9

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.

Driskill answered 19/12, 2013 at 4:30 Comment(0)
C
1

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?

Carree answered 19/12, 2013 at 4:23 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.