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

Posted

技术标签:

【中文标题】带有 JDK 17 的 Spring Boot 2.5+ - maven surefire 不执行现有测试【英文标题】:Spring Boot 2.5+ with JDK 17 - maven surefire doesn't execute existing tests 【发布时间】:2022-01-15 23:40:33 【问题描述】:

使用 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 测试启动器将有一个更新的 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>

我看了类似的问题,发现测试文件夹的路径应该在'src'下面。是的。

在文件夹中是一样的:

两个文件夹下面是一个“java”文件夹。

Surefire 不在 pom.xml 中,因为它在 spring-boot-test starter 中。

【问题讨论】:

【参考方案1】:

你的项目中存在什么样的测试?集成测试或/和单元测试?你能提供更多关于你的背景的细节吗?

无论如何,从 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>

【讨论】:

谢谢!这些测试都是在 Surefire v1 中运行的单元测试。 19.0.测试的名称是*Test.java。【参考方案2】:

您将看到没有运行测试的其他情况:

main 和 test 不在同一个文件夹中

测试文件名不以 *Test.java 结尾

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

org.apache.maven.plugins maven-surefire-插件 3.0.0-M5

【讨论】:

以上是关于带有 JDK 17 的 Spring Boot 2.5+ - maven surefire 不执行现有测试的主要内容,如果未能解决你的问题,请参考以下文章

使用 UTF-8 的 Spring Boot 属性文件

带有 Spring Boot 2.0 @ConfigurationProperties 的 Kotlin 无法正常工作

带有spring-boot的自定义sql中的Liquibase参数

带有 spring-boot-starter-web 的 Spring Cloud Gateway

261.Spring Boot+Spring Security:系列集合

222.Spring Boot+Spring Security:动态加载角色