Maven的故障安全不执行测试

问题描述 投票:27回答:7

我梳理的StackOverflow和许多其他网站,发现有很多其他相关的职位,按照所有说的建议,但最终,失效保护被跳过我的测试。

我的JUnit测试位于:myModule/src/main/test/java/ClientAccessIT.java

我跳过万无一失,因为有这个模块中没有单元测试:

<!-- POM snippet -->
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <configuration>
  <skip>true</skip>
  </configuration>
</plugin>

我试图与故障安全运行集成测试:

<!-- POM snippet -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <executions>
        <execution>
            <id>run-tests</id>
            <phase>integration-test</phase>
            <goals>
                <goal>integration-test</goal>
                <goal>verify</goal>
            </goals>
        </execution>
    </executions>
</plugin>

然而,当我运行mvn verify我看到这一点:

[INFO] --- maven-failsafe-plugin:2.14.1:integration-test (run-tests) @ rest-services-test ---

-------------------------------------------------------
 T E S T S
-------------------------------------------------------

Results :

Tests run: 0, Failures: 0, Errors: 0, Skipped: 0

我花了4个半小时精练,任何帮助,将不胜感激。这可能是值得一提的唯一的另一件事是,我有Cargo建立和拆除Tomcat容器。是否有人看到突出的问题?

java maven maven-failsafe-plugin
7个回答
19
投票

您需要重命名您的测试类。

你可以找到的名字插件查找在默认情况下在the documentation,由@acdcjunior指出:

默认情况下,故障安全插件会自动包括与以下通配符模式的所有测试类:

  • **/IT*.java” - 包括它的所有子目录,并以“IT”开始所有的Java文件名。
  • **/*IT.java” - 包括它的所有子目录,并以“IT”结尾的所有Java文件名。
  • **/*ITCase.java” - 包括它的所有子目录,并以“ITCase”结尾的所有Java文件名。

15
投票

我有一个类似的问题。如果没有编制针对任何测试类/测试类,然后检查你的POM文件,并确保包装不“POM”。


12
投票

对于多模块项目,子项目需要有插件声明为其次,

 <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
 </plugin>

从版本父POM继承。如果没有按上述定义,父POM插件还不行。


12
投票

你的测试是不是在默认的测试源目录的src / test / java下。看到:

https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html

Mymodule中/ SRC /主/测试/ JAVA / ClientAccessIT.java

应该:

Mymodule中/ SRC /测试/ JAVA / ClientAccessIT.java

您也可以更新您的POM文件(如果你真的想测试住在主),包括:

<build>
    <testSources>
        <testSource>
            <directory>src/main/test</directory>
        </testSource>
    </testSources>
</build>

6
投票

我也有过类似的问题,但所需要的包装元素是“POM”。确保您的测试源文件被编译并添加到... /目标/测试类文件夹使用Maven的编译器插件:

       <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>${maven.compiler.version}</version>
            <executions>
                <execution>
                    <phase>test-compile</phase>
                    <goals>
                        <goal>testCompile</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

2
投票

我有同样的问题,并尝试了一些这里的建议方案。我正在开发使用JUnit 5.不幸的是,没有我的集成测试(位于src/test/java*TestIT.java后缀)都拿到回升,无论advertising of the plugin的这样做一个春天启动应用程序。我试图downgrading to 2.18.1, 2.19.1,并试图消除双方的<executions><configuration>部分尝试使用甚至插件的默认功能,但没有运气。

我终于改变了版本为最新(截至截稿时)至2.22.0,和中提琴。这是我加入到我的POM的<build><plugins>节的配置。更妙的是,我并不需要补充的是定义你看大部分人包括integration-testverify目标处决;故障安全默认情况下执行这些。我包括我的保命插件配置为好,因为我用它在行家生命周期的test阶段执行单元测试。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.22.0</version><!--$NO-MVN-MAN-VER$-->
</plugin>

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-failsafe-plugin</artifactId>
  <version>2.22.0</version><!--$NO-MVN-MAN-VER$ -->
</plugin>

而刚刚好措施,告诉万无一失和故障安全to use JUnit 5,我包括这在我的<dependencies>部分:

<dependency>
  <groupId>org.junit.jupiter</groupId>
  <artifactId>junit-jupiter-engine</artifactId>
  <scope>test</scope>
</dependency>

Eclipse显示一个警告(黄色波浪下划线)版本标记下,因此列入<!--$NO-MVN-MAN-VER$ -->错误的。我敢肯定有更好的方法来解决这个问题,但在这种情况下,我的作品。

要加快测试此配置,避免不必经过所有test之前较早的生命周期阶段的,integration-test orverify阶段,我用下面的命令来快速验证:

  • mvn failsafe:integration-test(仅运行集成测试)
  • mvn surefire:test(只运行单元测试)
  • (我明明运行的整个生命周期的时数)

希望这可以帮助别人。干杯!


1
投票

对我来说,这是一个缺少执行部分

            <executions>
                <execution>
                    <goals>
                        <goal>integration-test</goal>
                        <goal>verify</goal>
                    </goals>
                </execution>
            </executions>

https://maven.apache.org/surefire/maven-failsafe-plugin/examples/testng.html TestNG的文档故障安全已经表现出POM没有它,它没有工作。

<plugins>
    [...]
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-failsafe-plugin</artifactId>
        <version>3.0.0-M3</version>
        <configuration>
          <suiteXmlFiles>
            <suiteXmlFile>testng.xml</suiteXmlFile>
          </suiteXmlFiles>
        </configuration>
      </plugin>
    [...]
</plugins>

添加上面显示的缺少执行部分解决了这个问题。


0
投票

我有几分相似的问题。我的集成测试并没有被拾起。我的项目是一个多模块春天启动的项目。我的错误是,我加入Maven的故障保护,插件在父POM。有许多选项摆弄周围后我把故障保护,插件的模块POM在我的所有的集成测试存在哪些解决我的问题。

© www.soinside.com 2019 - 2024. All rights reserved.