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

2022-09-01 00:02:42

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

我配置了 在各自的阶段执行单元/集成测试。当编译的类位于正确的目录中时,这非常有效。遗憾的是,Maven 仅支持一个测试源文件夹和一个测试输出文件夹。maven-surefire-plugin

使用mavens构建助手插件,我可以添加另一个测试源文件夹,但编译的类将被生成到中,但我想将类从编译到.这可能吗?test-classessrc/integration/javatarget/integration-test-classes

src/test/java > target/test-classes
src/integration/java > target/integration-test-classes

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


答案 1

根据您编写的内容,听起来好像您没有正确命名集成测试,并且您没有使用maven-failafe插件进行集成测试。根据 maven-failafe 插件的约定,您应该将集成测试命名为 .如果您适当地命名了集成测试,则可以使用或多或少的配置来处理它,如下所示:*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


答案 2

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

<build>
    <testSourceDirectory>${project.basedir}/src/test/groovy</testSourceDirectory>

如果所有单元测试都是用时髦编写的,这将非常有用。(但你还需要配置maven来编译你的时髦代码 - 参见groovy-eclipse-maven-pluginbuild-helper-maven-plugin


推荐