簡體   English   中英

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

[英]Configuring maven-failsafe-plugin to find integration tests not in src/test/java

我的目錄結構是這樣的:

  • 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>

無濟於事; failsafe 找不到要運行的測試。

我已經能夠使用 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 來排除該路徑。

我做錯了什么?

默認情況下,故障安全配置為僅包含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>

事實上,使用testClassesDirectory可能也適用於限制每個測試插件的范圍,但是您必須更改maven-compiler-plugin以將類輸出到不同的文件夾,也許將它的test-compile執行分成兩個,所以也許不值得努力。

使用此配置對位於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>

請注意, <include>中的模式不包含文件擴展名( **/*Specification.groovy不起作用)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM