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(那么)

    • 这是验证阶段。

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

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

相关推荐
wowocpp43 分钟前
spring boot Controller 和 RestController 的区别
java·spring boot·后端
后青春期的诗go1 小时前
基于Rust语言的Rocket框架和Sqlx库开发WebAPI项目记录(二)
开发语言·后端·rust·rocket框架
freellf1 小时前
go语言学习进阶
后端·学习·golang
独泪了无痕2 小时前
MongoTemplate 基础使用帮助手册
spring boot·mongodb
全栈派森3 小时前
云存储最佳实践
后端·python·程序人生·flask
CircleMouse3 小时前
基于 RedisTemplate 的分页缓存设计
java·开发语言·后端·spring·缓存
獨枭4 小时前
使用 163 邮箱实现 Spring Boot 邮箱验证码登录
java·spring boot·后端
维基框架4 小时前
Spring Boot 封装 MinIO 工具
java·spring boot·后端
秋野酱4 小时前
基于javaweb的SpringBoot酒店管理系统设计与实现(源码+文档+部署讲解)
java·spring boot·后端
☞无能盖世♛逞何英雄☜4 小时前
Flask框架搭建
后端·python·flask