为什么默认排除 junit-vintage-engine?
🏷️ Spring Boot JUnit
使用 Spring Initializr 创建 Spring Boot 项目时,默认是包含 spring-boot-starter-test 包的。
如果选择 spring-boot-starter-parent 2.3.10 版时,会发现其依赖的写法如下:
<!-- Test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
之所以自动排除 junit-vintage-engine 是因为 spring-boot-starter-test 的 2.2.x 和 2.3.x 版本中还包含另外一个测试引擎 junit-jupiter-engine 。
junit-vintage-engine:用于 Junit-4 测试
junit-jupiter-engine:用于 Junit-5 测试
JUnit Jupiter is the combination of the new programming model and extension model for writing tests and extensions in JUnit 5. The Jupiter sub-project provides a TestEngine for running Jupiter based tests on the platform.
JUnit Vintage provides a TestEngine for running JUnit 3 and JUnit 4 based tests on the platform.
如果选择 spring-boot-starter-parent 2.4.5 版,则可以发现默认已经不包含这段 exclusions 配置了。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
原因在于 spring-boot-starter-test 2.4.x 版本中,已经不再包含 junit-vintage-engine 这个依赖项了。