带有 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 不执行现有测试的主要内容,如果未能解决你的问题,请参考以下文章
带有 Spring Boot 2.0 @ConfigurationProperties 的 Kotlin 无法正常工作
带有spring-boot的自定义sql中的Liquibase参数
带有 spring-boot-starter-web 的 Spring Cloud Gateway