提问者:小点点

如何将另一个测试源文件夹添加到Maven并将其编译到单独的文件夹?


我有我们单元测试的默认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/**


共3个答案

匿名用户

根据你所写的,听起来你没有正确命名你的集成测试,也没有使用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测试用例的基类等。

相关问题