kevinarpe
kevinarpe

Reputation: 21319

Using the Maven surefire plugin to include tests

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

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>

Upvotes: 17

Views: 21414

Answers (3)

Evgeniy Dorofeev
Evgeniy Dorofeev

Reputation: 136132

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

<include>**/*Test.java</include>

Upvotes: 10

maheshsenni
maheshsenni

Reputation: 782

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.

Upvotes: 9

EdH
EdH

Reputation: 5003

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?

Upvotes: 1

Related Questions