Spring Boot 2.5+ with JDK 17 - maven surefire 不执行现有测试

Spring Boot 2.5+ with JDK 17 - maven surefire doesn't execute existing tests

当使用 JDK 17 将 Spring Boot 2.2 应用程序更改为 2.5.5 时,Surefire 测试插件不会启动任何现有测试。这是消息:

[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] 
[INFO] Results:
[INFO] 
[INFO] Tests run: 0, Failures: 0, Errors: 0, Skipped: 0

为什么它不启动任何现有测试?测试的名称是 *Test.java.

我在明确添加版本高于 2.19 的 Surefire 插件时看到了类似的行为。 Spring boot test starter 将有一个更新的 surefire 插件。

Maven 版本为 3.6.3。 路径上是jdk17.1.0.

<java.version>17</java.version>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>

我看了类似的问题,看到test文件夹的路径应该在'src'下面。是的,是的。

在文件夹中是一样的:

两个文件夹下面都有一个 'java' 文件夹。

Surefire 没有在 pom.xml 中明确显示,因为它在 spring-boot-test 启动器中。

你的项目中存在什么样的测试?集成测试 or/and 单元测试?能否详细介绍一下您的背景?

无论如何,从 spring-boot 的 2.4.0 版开始,JUnit 5 的 Vintage Engine 从 spring-boot-starter-test 中移除。

在 2.4.0 发行说明页上说 https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.4-Release-Notes :

    If you upgrade to Spring Boot 2.4 and see test compilation errors for JUnit 
classes such as org.junit.Test, this may be because JUnit 5’s vintage engine has been 
removed from spring-boot-starter-test. The vintage engine allows tests written with 
JUnit 4 to be run by JUnit 5. If you do not want to migrate your tests to JUnit 5 and 
wish to continue using JUnit 4, add a dependency on the Vintage Engine, as shown in 
the following example for Maven:

<dependency>
    <groupId>org.junit.vintage</groupId>
    <artifactId>junit-vintage-engine</artifactId>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>

其他情况你会看到没有测试运行:

  • Main 和 test 不在同一个文件夹中

  • 测试文件名不以*Test.java

    结尾
  • 有一个较旧的 surefire 插件,例如 2.14.x。只需使用较新的版本,例如

    org.apache.maven.plugins maven-surefire-plugin 3.0.0-M5