配置 maven-failsafe-plugin 以查找不在 src/test/java 中的集成测试

2024-04-22

我的目录结构是这样的:

  • src/integrationTest/java
  • src/test/java
  • src/main/java

我正在尝试进行故障保护以进行集成测试,但未能按照我想要的方式进行。

我已经尝试过这个:

<plugin>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.17</version>
    <executions>
        <execution>
            <goals>
                <goal>integration-test</goal>
                <goal>verify</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <testSourceDirectory>src/integrationTest/java</testSourceDirectory>
        <testClassesDirectory>${project.build.directory}/it-classes</testClassesDirectory>
    </configuration>
</plugin>

和这个:

<plugin>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.17</version>
    <executions>
        <execution>
            <goals>
                <goal>integration-test</goal>
                <goal>verify</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <includes>
            <include>src/integrationTest/**/*.java</include>
        </includes>
    </configuration>
</plugin>

无济于事;故障安全找不到要运行的测试。

我已经能够使用 build-helper-maven 插件添加测试源目录,然后故障安全地运行测试。

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.9.1</version>
    <executions>
        <execution>
            <id>add-integration-test-source-as-test-sources</id>
            <phase>generate-test-sources</phase>
            <goals>
                <goal>add-test-source</goal>
            </goals>
            <configuration>
                <sources>
                    <source>src/integrationTest/java</source>
                </sources>
            </configuration>
        </execution>
    </executions>
</plugin>

然而,现在的问题是,surefire 现在也将测试作为单元测试运行。此外,当故障安全应该能够找到测试时,似乎没有必要使用另一个插件;我宁愿不需要使用 build-helper maven 插件并配置 Surefire 来排除该路径。

我究竟做错了什么?


默认情况下,故障保护仅配置为include http://maven.apache.org/surefire/maven-failsafe-plugin/integration-test-mojo.html#includesIT*.java、*IT.java 或 *ITCase.java。同时,仅测试来自src/test/java被编译。您需要修改这两种行为。

  1. Use build-helper-maven-plugin to add src/integationTest/java作为测试源maven-compiler-plugin自动拾取。 (您在上次尝试中已经完成了此操作。)

  2. Direct maven-surefire-plugin排除集成测试(参见下面的示例)或仅包含非集成测试(参见默认包括 https://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#includes).

  3. Direct maven-failsafe-plugin仅包含您的集成测试而不是默认包含。


<plugin>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.17</version>
  <configuration>
    <excludes>
      <exclude>**/*Stuff.java</exclude>
    </excludes>
  </configuration>
</plugin>
<plugin>
  <artifactId>maven-failsafe-plugin</artifactId>
  <version>2.17</version>
  <executions>
    <execution>
      <goals>
        <goal>integration-test</goal>
        <goal>verify</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <includes>
      <include>**/*Stuff.java</include>
    </includes>
  </configuration>
</plugin>

事实上使用testClassesDirectory也可能适用于限制每个测试插件的范围,但您必须进行更改maven-compiler-plugin将类输出到不同的文件夹,也许将其拆分test-compile执行分为两部分,所以也许不值得付出努力。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

配置 maven-failsafe-plugin 以查找不在 src/test/java 中的集成测试 的相关文章

随机推荐