SpringBoot篇 单元测试 理论篇

1.单元测试概念介绍

简单来说,单元测试是对软件中的最小可测试单元进行检查和验证。在 Java 中,单元测试的最小单元是类。Spring Boot 提供了 spring-boot-starter-test 依赖,包含了JUnit、Mockito、Hamcrest 等常用的测试框架1。,主要作用有以下几点:

1.1 重要性

  • 及时发现问题:能在开发过程中尽早发现代码中的错误,避免问题积累到后期更难解决。

  • 保障功能正常:确保每个小部分的功能都按预期工作,让整个应用更可靠。

  • 方便后续修改:有单元测试的情况下,修改代码时能快速知道是否破坏了原有功能,更放心地进行优化和重构。

1.2 常用注解

  • @SpringBootTest:用于加载Spring Boot应用的上下文环境,让测试类可以使用Spring容器中的各种组件,适合进行集成测试或需要完整应用上下文的测试场景。

  • @WebMvcTest:用于测试Spring MVC相关的控制器等组件,会自动配置MockMvc,方便对HTTP请求和响应进行模拟和验证,但不会加载完整的应用上下文,测试速度相对较快。

  • @DataJpaTest:专门用于测试JPA相关的数据访问层代码,会自动配置内存数据库和相关的JPA组件,方便对数据库操作进行测试,也不需要加载完整应用上下文。

1.3 测试方法

  • 使用Mock对象:对于一些依赖外部系统或复杂组件的部分,可以用Mockito等工具创建Mock对象来模拟其行为,使测试更独立、更稳定,不受外部因素影响。

  • 断言验证:通过断言来验证测试结果是否符合预期,比如使用AssertJ等断言库,可以更方便地检查变量值、对象状态等是否正确。

1.4 单元测试依赖

XML 复制代码
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-test</artifactId>
  <scope>test</scope>
</dependency>

2. 单元测试应该测试什么?

2.1 测试内容

业务实现的路径 决定了单元测试的内容,如图所示:

上图展示了一个简单的三层架构流程:

  1. 用户发出请求。

  2. 请求被发送到Controller(控制器)。

  3. Controller调用Service(服务层)处理核心业务逻辑。

  4. Service层调用Dao(数据访问层)进行数据库的CRUD操作。

  5. Dao层与数据库(DB)交互,完成数据的存取。

  6. 数据库操作完成后,结果逐层返回给用户。


2.2 测试要素

单元测试的关键三要素是:

  1. 单元:指的是要测试的最小代码部分,比如一个函数。

  2. 用例:是具体的测试场景,包括输入和预期结果。

  3. 边界情况:测试输入数据的极限情况,确保代码能正确处理。


2.3 测试阶段

这里我们使用一种常用的测试方法,称为"Given-When-Then"模式,它将测试过程分为三个主要阶段:

  1. Given(给定)

    • 这是测试的准备阶段。

    • 在这个阶段,你需要设定测试的初始条件或环境,比如创建必要的数据或配置。

  2. When(当)

    • 这是执行阶段。

    • 在这个阶段,你执行特定的操作或触发某个事件,比如点击按钮或调用函数。

  3. Then(那么)

    • 这是验证阶段。

    • 在这个阶段,你检查操作的结果是否符合预期,比如验证数据是否正确更新或界面是否显示正确。

这种模式帮助测试人员清晰地定义测试场景,确保测试的每个步骤都有明确的目的和预期结果。

相关推荐
考虑考虑28 分钟前
Springboot3.5.x结构化日志新属性
spring boot·后端·spring
涡能增压发动积30 分钟前
一起来学 Langgraph [第三节]
后端
sky_ph43 分钟前
JAVA-GC浅析(二)G1(Garbage First)回收器
java·后端
涡能增压发动积1 小时前
一起来学 Langgraph [第二节]
后端
TTDreamTT1 小时前
SpringBoot十二、SpringBoot系列web篇之过滤器Filte详解
spring boot
hello早上好1 小时前
Spring不同类型的ApplicationContext的创建方式
java·后端·架构
roman_日积跬步-终至千里1 小时前
【Go语言基础【20】】Go的包与工程
开发语言·后端·golang
00后程序员2 小时前
提升移动端网页调试效率:WebDebugX 与常见工具组合实践
后端
HyggeBest3 小时前
Mysql的数据存储结构
后端·架构
TobyMint3 小时前
golang 实现雪花算法
后端