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>
kevinarpe
  • 20,319
  • 26
  • 127
  • 154

3 Answers3

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>
Duncan Jones
  • 67,400
  • 29
  • 193
  • 254
Evgeniy Dorofeev
  • 133,369
  • 30
  • 199
  • 275
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.

Community
  • 1
  • 1
maheshsenni
  • 764
  • 7
  • 16
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?

EdH
  • 4,918
  • 4
  • 24
  • 34