45

我梳理了 StackOverflow 和许多其他网站,找到了许多其他相关的帖子,并遵循了所有所说的建议,但最后,故障安全正在跳过我的测试。

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

跳过了surefire,因为这个模块中没有单元测试:

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

我正在尝试使用failsafe运行集成测试:

<!-- 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 1/2 小时进行搜索,任何帮助将不胜感激。唯一值得一提的是,我设置了Cargo并拆除了一个 Tomcat 容器。有人看到明显的问题吗?

4

13 回答 13

28

您的测试不在默认的测试源目录 src/test/java 中。看:

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

myModule/src/main/test/java/ClientAccessIT.java

应该:

myModule/src/test/java/ClientAccessIT.java

您还可以更新您的 pom 文件(如果您真的希望测试存在于 main 中)以包括:

<build>
    <testSources>
        <testSource>
            <directory>src/main/test</directory>
        </testSource>
    </testSources>
</build>
于 2017-05-09T17:02:03.023 回答
18

我有一个类似的问题。如果没有编译到目标/测试类的任何测试类,请检查您的 pom 文件并确保打包不是“pom”。

于 2015-07-31T21:11:49.667 回答
15

对于多模块项目,子项目需要将插件声明如下,

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

版本继承自父 pom。如果没有上述定义,则仅父 pom 中的插件将无法正常工作。

于 2016-08-01T19:49:13.790 回答
13

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

正如@acdcjunior 所指出 的,您可以在文档中找到插件默认查找的名称:

默认情况下,Failsafe Plugin 将自动包含所有具有以下通配符模式的测试类:

  • " **/IT*.java" - 包括它的所有子目录和所有以 "IT" 开头的 java 文件名。
  • " **/*IT.java" - 包括它的所有子目录和所有以 "IT" 结尾的 java 文件名。
  • " **/*ITCase.java" - 包括它的所有子目录和所有以 "ITCase" 结尾的 java 文件名。
于 2013-05-05T18:45:40.330 回答
13

如果您碰巧使用Spring Boot 2.4或更高版本,并且您的测试仍然使用JUnit 4,请记住放置此依赖项:

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

2.4 版spring-boot-starter-test仅包含 JUnit 5 并删除了提供 TestEngine 用于运行基于 JUnit 3 和 4 的测试的老式引擎。

如果没有那个老式引擎,所有 JUnit 4 测试都会被忽略。

于 2021-03-29T09:02:00.517 回答
8

我遇到了同样的问题,并在这里尝试了一些建议的选项。我正在使用 JUnit 5 开发 Spring Boot 应用程序。不幸的是,无论插件的广告src/test/java如何,我的集成测试(位于并以 . 我尝试降级到 2.18.1 和 2.19.1并尝试同时删除和部分以尝试使用插件的默认功能,但没有运气。*TestIT.java<executions><configuration>

我终于将版本更改为最新版本(截至撰写本文时)为 2.22.0 和 viola。这是我添加到<build><plugins>我的 pom.xml 部分的配置。更好的是,我不需要添加定义您看到的大多数人包含的目标integration-test的执行;verify故障安全默认执行这些。我也包含了我的surefire插件配置,因为我在testmaven生命周期阶段使用它来执行单元测试。

编辑:我还必须在插件配置中添加integration-test和执行。verify

<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$ -->
  <executions>
    <execution>
      <goals>
        <goal>integration-test</goal>
        <goal>verify</goal>
      </goals>
     </execution>
  </executions>
</plugin>

为了更好地衡量,告诉万无一失和故障安全使用 JUnit 5,我在我的<dependencies>部分中包括了这个:

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

Eclipse 在版本标记下显示警告(黄色波浪下划线),因此包含<!--$NO-MVN-MAN-VER$ -->错误。我确信有更好的方法来处理这个问题,但在这种情况下它对我有用。

为了加快测试此配置,并避免必须经历之前的所有早期生命周期阶段或阶段,我使用以下命令快速验证:testintegration-testverify

  • mvn failsafe:integration-test(仅运行集成测试)
  • mvn surefire:test(仅运行单元测试)
  • (我显然会在重要的时候运行整个生命周期)

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

于 2018-07-26T16:25:09.637 回答
6

我也有类似的问题,但需要包装元素是“pom”。确保您的测试源文件正在编译并使用 maven-compiler-plugin 添加到 .../target/test-classes 文件夹:

       <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>
于 2016-02-17T12:31:10.350 回答
3

对我来说,这是一个缺失的处决部分

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

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

于 2019-06-30T10:55:51.793 回答
1

我正在使用 java 8,故障安全插件版本 2.22.2 => 测试未运行问题,为了解决这个问题,我添加了下一个:

<plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-failsafe-plugin</artifactId>
     <version>${surefire.plugin.version}</version>
     <dependencies>
         <dependency>
             <groupId>org.apache.maven.surefire</groupId>
             <artifactId>surefire-junit47</artifactId>
             <version>2.22.2</version>
         </dependency>
    </dependencies>
     <executions>
         <execution>
             <id>integration</id>
             <phase>integration-test</phase>
             <goals>
                 <goal>integration-test</goal>
            </goals>
        </execution>
        <execution>
            <id>verify</id>
            <phase>verify</phase>
            <goals>
                <goal>verify</goal>
            </goals>
        </execution>
     </executions>
</plugin>
于 2020-06-29T13:41:05.013 回答
0

我有一些类似的问题。我的集成测试没有被选中。我的项目是一个多模块 Spring Boot 项目。我的错误是我在父 POM 中添加了 maven-failsafe-plugin。在摆弄了许多选项之后,我将故障安全插件放在了模块 pom 中,我所有的集成测试都在其中解决了我的问题。

于 2018-09-19T08:01:45.560 回答
0

由于有很多部分可以导致这个问题,我将分享我的解决方法。

我的 maven 设置文件 ( .m2/settings.xml) 中有一个活动配置文件,它的maven.test.skip属性设置为true,当我通过 maven 运行测试时,它正在跳过测试。旧应用程序需要它,我完全忘记了那个配置文件。

</profiles>
   <profile>
      <id>god-damnit-profile</id>
      <properties>
        ...
        <maven.test.skip>true</maven.test.skip>
      </properties>
    </profile>
  </profiles>
  <activeProfiles>
    <activeProfile>god-damnit-profile</activeProfile>
  </activeProfiles>

我把它注释掉了,它现在可以工作了。

<activeProfiles>
    <!-- <activeProfile>god-damnit-profile</activeProfile> -->     
</activeProfiles>
于 2021-01-27T19:01:25.550 回答
0

对我来说,surefire:verify没有运行任何测试。我不得不使用surefire:integration-test.

于 2020-03-18T13:36:24.253 回答
0

如果您使用JUnit5,请不要忘记将以下依赖项添加到您的测试类路径中:

    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <scope>test</scope>
    </dependency>
于 2021-11-03T11:28:23.827 回答