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