我正在使用Maven来构建我的项目。我目前将测试分为不同的层次结构:
src/test/java/**/*Test.java
src/test-integration/java/**/*Test.java
src/test-external/java/**/*Test.java
以下是我的maven-surefire-plugin
部分:
<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>
上面的<include>
指令不起作用。我运行时没有执行任何测试:mvn clean test
我尝试**/*Test.java
并运行所有测试 - 单元,集成和外部。但是,对于默认测试套件,我只想运行单元测试。
如何在Maven中完成这项工作?
价:
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.14.1</version>
答案 0 :(得分:8)
您应该将您的单元和集成测试用例分开。单元测试可以使用Surefire插件运行,并且有一个名为Failsafe的独立插件用于运行集成测试。
默认情况下,Surefire插件会运行名称以*Test.java
结尾的所有测试文件。诀窍是使用不同的名称命名集成测试文件,例如*IT.java
。 Failsafe插件会将它们识别为集成测试。
您可以在此答案中找到示例用法 - How do I get my Maven Integration tests to run
如果您遵循默认设置,例如将测试用例文件放在src/test/java
文件夹中,并将测试文件命名为*Test.java
,则无需单独配置Surefire插件。
答案 1 :(得分:7)
这是因为<include>
路径相对于<testSourceDirectory>
,默认为${project.build.testSourceDirectory}
= src / test / java。试试这个
<include>**/*Test.java</include>
答案 2 :(得分:1)
使用排除而不是包含会更容易吗?
<excludes>
<exclude>test-integration/**/*</exclude>
<exclude>test-external/**/*</exclude>
</excludes>
或类似的东西?