我有我们单元测试的默认src/test/java
文件夹。集成测试可以使用单独的文件夹src/集成/java
。
我配置了maven-surefire-plugin
来执行各自阶段的单元/集成测试。当编译的类位于正确的目录中时,这非常有效。不幸的是,Maven只支持一个测试源文件夹和一个测试输出文件夹。
使用mavens build-helper插件,我可以添加另一个test-source文件夹,但编译后的类将生成到test-class
中,但我想将src/集成/java
中的类编译到目标/集成测试类
中。这可能吗?
src/test/java > target/test-classes
src/integration/java > target/integration-test-classes
PS:我不喜欢这个基于包的排除/包含解决方案(从默认测试阶段排除所有**/it/**
文件,从集成阶段排除所有**/unit/**
。
根据你所写的,听起来你没有正确命名你的集成测试,也没有使用maven-不安全的插件来进行集成测试。根据maven-不安全的插件的约定,你应该像*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-test/类
),这并不认为会真正起作用。
如果您只想更改单元测试源文件夹(而不是添加额外的文件夹),只需更改testSourceDirectory
元素:
<build>
<testSourceDirectory>${project.basedir}/src/test/groovy</testSourceDirectory>
如果您的所有单元测试都是用groovy编写的,这很有用。(但您还需要配置maven以编译您的groovy代码-请参阅groovy-eclipse-maven-plugin或build-helper-maven-plugin。)
抱歉,即使考虑到一些黑客攻击,也没有办法做到这一点。这里的概念是编译类只有一个目标目录,编译测试类只有一个目标目录(即使是单个
我认为你真正想做的实际上是创建集成测试模块。顺便说一句,这是常见的做法。到目前为止,我一直有单独的集成测试模块,并且从未遇到任何问题。您应该依赖于运行这些测试所需的所有模块。您甚至可以通过使用来依赖其他模块的测试类
http://maven.apache.org/guides/mini/guide-attached-tests.html
然而,我不喜欢这种方法,并且通常更喜欢具有测试支持内容的单独模块,例如JUnit测试用例的基类等。