我有单独测试的默认src/test/java
文件夹。单独的文件夹src/integration/java
可用于集成测试。
我将maven-surefire-plugin
配置为在各自的阶段执行单元/集成测试。当编译的类位于正确的目录中时,这非常有用。不幸的是,Maven只支持一个测试源文件夹和一个测试输出文件夹。
使用mavens build-helper插件我可以添加另一个测试源文件夹,但编译的类将生成到test-classes
但我想将这些类从src/integration/java
编译成target/integration-test-classes
。这可能吗?
src/test/java > target/test-classes
src/integration/java > target/integration-test-classes
PS:我不喜欢这种排除/包含在打包基础上的解决方案(从默认测试阶段排除所有**/it/**
个文件,并从集成阶段排除所有**/unit/**
。
答案 0 :(得分:37)
基于您所编写的内容,听起来您没有正确命名集成测试,并且您没有使用maven-failsafe-plugin进行集成测试。根据{{3}}的约定,您应该将集成测试命名为*IT.java
。如果您恰当地命名了集成测试,则可以使用或多或少的配置来处理它:
<project ...>
[...]
<build>
[...]
<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>generate-test-sources</phase>
<goals>
<goal>add-test-source</goal>
</goals>
<configuration>
<sources>
<source>src/integration/java</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
[...]
</build>
[...]
</project>
通过上述内容,可以将集成测试保存在同一模块中。但这并不能解决将已编译的集成测试类放入单独的文件夹的想法。
有时最好有一个单独的集成测试模块,它只包含集成测试(导致多模块构建)。
如果您想保留Maven的约定,您可以尝试配置maven-compiler-plugin以使用不同的输出路径(例如target/integration-tests/classes
),这些路径认为不会真正起作用。
答案 1 :(得分:10)
抱歉,没有办法做到这一点,恕我直言,即使有一些黑客入侵。这个概念是,编译的类只有一个目标目录,而编译的测试类只有一个目标目录(甚至<build>
标签模式暴露了这个)。说实话,我真的不认为Maven应该可行。 Maven通过使用精心设计的模块,促进应用程序的直接,干净和清晰的设计。
如果认为你真正想要做的是实际创建集成测试模块。事实上,这是常见的做法。到目前为止,我总是有单独的集成测试模块,从来没有遇到过问题。您当然应该依赖于运行这些测试所需的所有模块。您甚至可以依赖于其他模块的测试类,使用<type>test-jar</type>
和您在此处提到的依赖性声明:
http://maven.apache.org/guides/mini/guide-attached-tests.html
我不喜欢这种方法,但通常更喜欢单独的模块和测试支持的东西,比如JUnit测试用例的基类等。
答案 2 :(得分:9)
如果您只想更改单元测试源文件夹(而不是添加其他文件夹),只需更改testSourceDirectory
元素:
<build>
<testSourceDirectory>${project.basedir}/src/test/groovy</testSourceDirectory>
如果所有单元测试都是用groovy编写的,那么这很有用。 (但您还需要配置maven来编译您的groovy代码 - 请参阅groovy-eclipse-maven-plugin或build-helper-maven-plugin。)
答案 3 :(得分:0)
我无法创建多个测试源文件并让代码在 Eclipse 中运行。我确实理解人们可能需要多个测试源文件夹的原因有很多,包括以下内容
我对此的解决方案是创建一个新项目,然后根据此处写入的内容在新项目中创建多个源文件夹(不是测试源文件夹):https://www.baeldung.com/maven-project-multiple-src-directories。
这满足上面列出的所有要求。
我热切地等待您的提示,但请务必让我们知道这件事的不利方面。证明我错了;)