SpringBoot集成Junit单元测试实践
@SpringBootTest 注解
@SpringBootTest 注解作用是指示测试类是一个 SpringBoot 应用程序的集成测试类,用于加载完整的应用程序上下文,包括所有的配置、组件和依赖项。
它会模拟启动整个应用程序,并提供一个可用于执行集成测试的应用程序上下文。
@SpringBootTest 注解可以配置以下属性:
classes:指定要加载的配置类。使用@SpringBootTest注解时,SpringBoot 会尝试查找并加载主应用程序类(通常是带有@SpringBootApplication注解的类),然后基于该类的配置启动应用程序上下文。如果不指定classes属性,Spring Boot 会默认寻找当前测试类所在包及其子包下的带有@SpringBootApplication注解的主配置类。指定classes属性的本质是调用该启动类main方法中的SpringApplication.run(xxx.class, args);方法启动 SpringBoot,如果启动 SpringBoot 的逻辑是定制的,那么就不能使用@SpringBootTest(替代方案是通过在单元测试手动调用启动类的 main 方法启动)。webEnvironment:指定 Web 环境的类型。默认为WebEnvironment.MOCK,表示使用模拟的 Web 环境。properties:指定要添加到应用程序上下文的属性。可以用于覆盖应用程序配置中的属性值。
使用 @SpringBootTest 可以编写集成测试,测试整个应用程序的各个组件、依赖项和配置的交互。它提供了一个真实的应用程序上下文,能够模拟和测试实际运行时的行为。
集成 Junit 5
JUnit 5 是 JUnit 框架的第五个主要版本,是用于 Java 编程语言的一个广泛使用的单元测试框架。相较于之前的版本,JUnit 5 有许多显著的改进和新特性,以更好地满足现代 Java 开发的测试需求。
以下是 JUnit 5 的组成部分:
| 组成部分 | 说明 |
|---|---|
| JUnit Platform | 在 JVM 上启动测试框架的基础,不仅支持JUnit 自制的测试引擎,其他测试引擎也都可以接入。 |
| JUnit Jupiter | 提供了 JUnit 5 的新的编程模型,是 JUnit 5 新特性的核心。内部包含了一个测试引擎,用于在 JUnit Jupiter 上运行。 |
| JUnit Vintage | 由于 JUnit 已经发展多年,为了照顾老的项目,JUnit Vintage 提供了兼容 JUnit 4.x、JUnit 3.x 的测试引擎。 |
引入 Junit 5
SpringBoot 2.2.0 版本开始引入 JUnit 5 作为单元测试默认库,所以对于 SpringBoot 2.2.0 及以上的版本而言,只需要在 pom.xml 中引入 spring-boot-starter-test 模块即可支持对 Junit 5 单元测试框架的集成:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>使用 JUnit 5
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest(classes = xxx.class)
public class MyTest {
@Test
void myTest(){
// ...
}
}
JUnit 5 常用测试注解
| 注解 | 说明 |
|---|---|
| @Test | 单元测试 |
| @DisplayName | 为测试类或测试方法设置展示名称 |
| @BeforeEach | 在每个单元测试之前执行 |
| @AfterEach | 在每个单元测试之后执行 |
| @BeforeAll | 在所有单元测试之前执行,方法必须用 static 关键字声明为静态方法,否则会报错 |
| @AfterAll | 在所有单元测试之后执行,方法必须用 static 关键字声明为静态方法,否则会报错 |
| @Tag | 表示单元测试的类型 |
| @Disabled | 表示测试类或测试方法不执行 |
| @Timeout | 表示测试方法运行如果超过制定时间将返回错误 |
| @ExtendWith | 为测试类或测试方法提供扩展类引用 |
| @RepeatedTest | 重复执行的次数 |
| @ParameterizedTest + @ValueSource | 携带参数的单元测试 |
集成 Junit 4
引入 Junit 4
方式一
SpringBoot 2.4 以上版本移除了默认对 Vintage 的依赖(无法使用 Junit 4 功能,如 @Test 等),如果需要兼容 JUnit 4 需要自行引入。
<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>方式二
直接引入 JUnit 4 框架:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>使用 JUnit 4
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.junit.Test;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
public class LocalTest {
@Test
void test(){
// ...
}
}
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Java EasyExcel实现合并相同内容单元格与动态标题功能
这篇文章主要为大家详细介绍了Java EasyExcel如何实现合并相同内容单元格与动态标题功能,文中的示例代码讲解详细,有需要的小伙伴可以参考下2023-12-12
MyBatis-Plus实现2种分页方法(QueryWrapper查询分页和SQL查询分页)
本文主要介绍了MyBatis-Plus实现2种分页方法,主要包括QueryWrapper查询分页和SQL查询分页,具有一定的参考价值,感兴趣的可以了解一下2021-08-08


最新评论