Junit4 / Junit5 / Spring Boot / IDEA
IDEA版本
我这里用的是 2022
版本不同,主要跟生成的模板代码有关系
Spring-Boot-Older-Release-Notes
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-Older-Release-Notes
@SpringBootTest 起源 & Spring-Boot-1.4-Release-Notes
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-1.4-Release-Notes
- 我们可以看到 新增的 @SpringBootTest注解 依然是采用 junit4 。
- 当然了1.0.0.RELEASE ~ 1.0.3.RELEASE的版本也是使用的 junit4 (版本不同) ,只是没有提供 @SpringBootTest注解
2.0.0.RELEASE ----- 2.0.9.RELEASE
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Release-Notes
2.1.0.RELEASE ----- 2.1.18.RELEASE
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.1-Release-Notes
2.2.0.RELEASE ~ 2.2.13.RELEASE
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.2-Release-Notes
2.3.0.RELEASE ~ 2.3.12.RELEASE
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.3-Release-Notes
2.4 ~2.7 随后版本类似 ,只是更新 junit5版本
3.x 随后版本类似 ,只是更新 junit5版本
这里我们以大版本3.x 为例 看一下
junit4 vs junit5
JUnit 4 和 JUnit 5 是 Java 中用于编写单元测试的两个主要框架。它们有一些重要的区别,包括以下几个方面:
1.架构和模块化:
JUnit 4 是一个单一的 JAR 文件,没有明确定义的模块系统。测试类通常继承自 TestCase 类,使用 @Test 注解来标识测试方法。
JUnit 5 更加模块化,它将不同的功能分解成多个模块,例如 junit-jupiter-api 用于编写测试,junit-jupiter-engine 用于运行测试,junit-platform-commons 用于共享工具等。这使得用户可以选择性地添加所需的功能。
2.扩展性:
JUnit 4 的扩展是通过 @RunWith 和 TestRule 来实现的,有一些限制。
JUnit 5 提供了更强大的扩展模型,称为 Jupiter 扩展模型,允许用户创建自定义扩展来修改测试执行过程,这些扩展可以通过 @ExtendWith 注解应用到测试类。
3.注解:
JUnit 4 使用 @Test 注解来标识测试方法,还有其他一些用于设置测试环境的注解,如 @Before 和 @After。
JUnit 5 使用了一组新的注解,例如 @Test, @BeforeEach, @AfterEach, @BeforeAll, 和 @AfterAll。这些注解提供了更多的灵活性和可读性。
4.断言:
JUnit 4 使用 Assert 类中的静态方法来执行断言。
JUnit 5 提供了一组新的断言方法,它们更加丰富和表达力强,包括 assertNotNull, assertThrows, 和 assertTimeout 等。
5.参数化测试:
JUnit 4 支持参数化测试,但需要使用 @Parameters 注解和一个特殊的方法来定义参数。
JUnit 5 引入了更强大的参数化测试功能,通过 @ParameterizedTest 注解和 @MethodSource 或 @CsvSource 等注解来支持参数化测试,使其更易于使用和理解。
6.条件测试:
JUnit 4 缺乏内置的条件测试支持。
JUnit 5 引入了 @EnabledOnOs,@EnabledIf,@EnabledIfSystemProperty,等注解,可以根据条件来启用或禁用测试。
7.动态测试:
JUnit 5 支持动态测试,可以在运行时生成测试用例,而不需要在编译时知道所有测试情况。
总的来说,JUnit 5 引入了许多改进和新功能,使得编写和管理测试更加灵活和强大。然而,迁移到 JUnit 5 需要一些工作,特别是如果你的项目已经使用了 JUnit 4。最佳选择取决于你的具体需求和项目的情况。如果你正在开始一个新项目,那么考虑使用 JUnit 5,因为它提供了更多的功能和灵活性。如果你的项目已经使用 JUnit 4,那么可以逐步迁移到 JUnit 5,以便利用新功能和改进。