当我们说 mvn test 时,通常的方式是 maven 会查找 src/test/java 文件夹中存在的测试。但是我在一些不同的文件夹中进行了测试,即 src/integration-test/java。如何通过命令行运行此文件夹中存在的测试?
提前致谢,
马诺伊。
当我们说 mvn test 时,通常的方式是 maven 会查找 src/test/java 文件夹中存在的测试。但是我在一些不同的文件夹中进行了测试,即 src/integration-test/java。如何通过命令行运行此文件夹中存在的测试?
提前致谢,
马诺伊。
首先,您不应该通过测试 生命周期运行那些集成测试,因为 存在pre-integration-test、integration-test和post-integration-test生命周期阶段。除了集成测试之外,maven-failsafe-plugin负责。
有几种选择可以处理您的情况。首先,您应该遵循集成测试的命名约定
<includes>
<include>**/IT*.java</include>
<include>**/*IT.java</include>
<include>**/*ITCase.java</include>
</includes>
这意味着将集成测试放入默认文件夹src/test/java。如果你有一个多模块构建,最好有一个单独的模块,它只包含集成测试,或者你可以走你决定使用单独文件夹的路径(这不是最好的):
首先,您需要使用buildhelper-maven-plugin添加文件夹,以便像这样编译这些集成测试:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.9.1</version>
<executions>
<execution>
<id>add-test-source</id>
<phase>process-resources</phase>
<goals>
<goal>add-test-source</goal>
</goals>
<configuration>
<sources>
<source>src/integration-test/java</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
你必须像这样配置 maven-failsafe-plugin:
<project>
[...]
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.14.1</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
[...]
</project>
配置完成后,您可以通过以下方式运行集成测试:
mvn verify
@khmarbaise 对他的建议是正确的(所以 +1),但我想回答你的问题,而不是推测测试源位于其他地方的原因。
如果您的测试位于标准src/test/java
目录之外的其他目录中,最简单的解决方案是更改Super POMtestSourceDirectory
中定义的配置参数的默认值。
例如src/foobar/java
使用
<build>
<testSourceDirectory>src/foobar/java</testSourceDirectory>
</build>
然后你可以简单地运行mvn test
来执行测试。
更复杂的解决方案...
如果您不想更改 pom.xml 配置,您可以在命令行上指定testSourceDirectory参数,如下所示:
mvn -DtestSourceDirectory=src/foobar/java clean test
但请确保您的源代码已编译。否则将无法找到并执行它们。在上面的示例中,测试源没有放置在默认编译的位置,因此我们仍然必须更改 pom 并使用buildhelper插件将目录添加到测试源列表中:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<id>add-test-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-test-source</goal>
</goals>
<configuration>
<sources>
<source>src/foobar/java</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
如果您不想更改 pom 中默认值的配置并且不想在命令行中传递新目录,则必须在 pom 中配置 maven-buildhelper-plugin 和 maven-surefire-plugin 中的路径.xml 像这样:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<id>add-test-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-test-source</goal>
</goals>
<configuration>
<sources>
<source>src/foobar/java</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.14.1</version>
<configuration>
<testSourceDirectory>src/foobar/java</testSourceDirectory>
</configuration>
</plugin>
</plugins>
</build>
现在再次简单地使用mvn test
将在非标准位置执行测试。