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

Chr*_*wes 36 java maven maven-surefire-plugin

我有src/test/java单元测试的默认文件夹.单独的文件夹src/integration/java可用于集成测试.

我将其配置为maven-surefire-plugin在各自的阶段执行单元/集成测试.当编译的类位于正确的目录中时,这非常有用.不幸的是,Maven只支持一个测试源文件夹和一个测试输出文件夹.

随着内行建立辅助插件,我可以添加其他的测试源文件夹,但已编译的类将生成到test-classes,但我想从编译类 src/integration/javatarget/integration-test-classes.这可能吗?

src/test/java > target/test-classes
src/integration/java > target/integration-test-classes
Run Code Online (Sandbox Code Playgroud)

PS:我不喜欢这种排除/包含在基础解决方案上的解决方案(排除**/it/**默认测试阶段的所有文件,并将所有文件从**/unit/**集成阶段排除.

khm*_*ise 37

基于您所编写的内容,听起来您没有正确命名集成测试,并且您没有使用maven-failsafe-plugin进行集成测试.基于maven-failsafe-plugin的约定,您应该将集成测试命名为*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>
Run Code Online (Sandbox Code Playgroud)

通过上述内容,可以将集成测试保存在同一模块中.但这并不能解决将已编译的集成测试类放入单独的文件夹的想法.

有时最好有一个单独的集成测试模块,它只包含集成测试(导致多模块构建).如果您希望保留Maven的约定,您可以尝试配置maven-compiler-plugin以使用不同的输出路径(例如target/integration-tests/classes),这些路径认为不会真正起作用.


Gre*_*ant 13

如果您只想更改单元测试源文件夹(而不是添加另一个),只需更改testSourceDirectory元素:

<build>
    <testSourceDirectory>${project.basedir}/src/test/groovy</testSourceDirectory>
Run Code Online (Sandbox Code Playgroud)

如果所有单元测试都是用groovy编写的,那么这很有用.(但是你也需要配置maven来编译你的groovy代码 - 参见groovy-eclipse-maven-pluginbuild-helper-maven-plugin.)


Mic*_*ski 9

对不起,没有办法做到这一点,恕我直言,甚至考虑到一些黑客攻击.这个概念是,编译的类只有一个目标目录,而编译的测试类只有一个目标目录(甚至<build>标签模式也暴露了这个).说实话,我真的不认为Maven应该可行.Maven通过使用精心设计的模块,促进您的应用程序的直接,干净和清晰的设计.

如果认为你真正想要做的是实际创建集成测试模块.事实上,这是常见的做法.到目前为止,我总是有单独的集成测试模块,从来没有遇到过问题.您当然应该依赖于运行这些测试所需的所有模块.您甚至可以依赖于其他模块的测试类,<type>test-jar</type>如下所述:

http://maven.apache.org/guides/mini/guide-attached-tests.html

但是,我不喜欢这种方法,并且通常更喜欢单独的模块和测试支持的东西,比如JUnit测试用例的基类等.