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

neu*_*tic 8 java maven maven-failsafe-plugin

我的目录结构如下:

  • 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>
Run Code Online (Sandbox Code Playgroud)

和这个:

<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>
Run Code Online (Sandbox Code Playgroud)

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

我已经能够使用build-helper-maven插件添加一个test-source目录,然后使用failsafe运行测试。

<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>
Run Code Online (Sandbox Code Playgroud)

但是,现在的问题是,surefire现在也将测试作为单元测试运行。当故障保险应该能够找到测试时,似乎也不必使用其他插件。我不希望不需要使用build-helper maven插件并配置surefire来排除该路径。

我究竟做错了什么?

Ant*_*jev 6

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

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

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

  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>
Run Code Online (Sandbox Code Playgroud)

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