【问题标题】:Configuring maven-failsafe-plugin to find integration tests not in src/test/java配置 maven-failsafe-plugin 以查找不在 src/test/java 中的集成测试
【发布时间】:2023-03-03 05:39:18
【问题描述】:

我的目录结构是这样的:

  • 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 以排除该路径。

我做错了什么?

【问题讨论】:

    标签: java maven maven-failsafe-plugin


    【解决方案1】:

    默认情况下,故障安全仅配置为 include IT*.java、*IT.java 或 *ITCase.java。同时,仅编译来自src/test/java 的测试源。您需要修改这两种行为。

    1. 使用build-helper-maven-pluginsrc/integationTest/java 添加为maven-compiler-plugin 的测试源以自动拾取。 (您在上次尝试中已经这样做了。)

    2. 直接maven-surefire-plugin 排除您的集成测试(参见下面的示例)或仅包括非集成测试(参见default includes)。

    3. 直接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 执行分成两个,所以也许这不值得。

    【讨论】:

    • 当然,最小的配置约定是将您的集成测试类保留在src/test/java 中并根据这些命名模式重命名它们:IT*.java*IT.java*ITCase.java
    • 以上似乎不起作用:(我同意命名约定;但目前在这种情况下不可能。
    • 请确认您在该文件夹中有.class 文件。通常maven-compiler-plugintest-compile 阶段生成它们,但这适用于src/test/java 文件夹。如果您使用的是不同的文件夹,我认为您需要添加一个额外的编译步骤。
    • 确实,编译是您最有可能缺少的,这就是build-helper-maven-plugin 提供帮助的原因,因为它为maven-compiler-plugin 提供了有关要编译的其他类的信息。我将发布与此相关的不同答案...
    • 哇,即使对于 TestNG,默认值也只有 *IT 文件。惊呆了……
    【解决方案2】:

    使用此配置对位于 src/test/groovy 的 Groovy 进行有效的集成测试:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-failsafe-plugin</artifactId>
        <version>3.0.0-M5</version>
        <executions>
            <execution>
                <id>spock-integration-tests</id>
                <goals>
                    <goal>integration-test</goal>
                    <goal>verify</goal>
                </goals>
                <configuration>
                    <failIfNoTests>true</failIfNoTests>
                    <testSourceDirectory>${project.basedir}/src/test/groovy</testSourceDirectory>
                    <includes>
                        <include>**/*Specification</include>
                    </includes>
                </configuration>
            </execution>
        </executions>
    </plugin>
    

    注意&lt;include&gt; 中的模式不包含文件扩展名(**/*Specification.groovy 不起作用)

    【讨论】:

      猜你喜欢
      • 2019-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-31
      • 2016-12-30
      • 1970-01-01
      • 2012-02-11
      • 1970-01-01
      相关资源
      最近更新 更多