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
当使用 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