0 序言

7 阅读3分钟

序言

为什么写这个教程

在多年的开发实践中,我发现一个普遍存在的问题:很多开发者会写业务代码,但不会写测试代码。即使写了测试,也往往是:

  • 测试覆盖率为零,或者为了「达标」而凑数
  • 测试代码质量低下,维护成本高昂
  • 不知道如何测试数据库交互、HTTP 请求、权限控制等常见场景
  • 对 TDD(测试驱动开发)有所耳闻,但从未真正实践过

所以本项目的初衷就是打造一门兼具实用性和易学性的测试课程。通过从零开始构建一个仿知乎的问答系统,手把手带你掌握 Spring Boot 应用的测试技能。

项目特色

真实的 TDD 开发流程

本教程严格遵循 TDD 的「红 - 绿 - 重构」循环:

1. 编写一个测试 → 2. 运行测试(失败) → 3. 编写最少代码使测试通过 → 4. 重构代码 → 5. 重复

你将亲身体验「先写测试,后写实现」的完整开发流程,理解 TDD 如何帮助你:

  • 更清晰地思考需求
  • 设计出更松耦合的代码
  • 获得重构的信心(测试保护网)

全面的测试场景覆盖

本项目将以 TDD 为切入口,讲解 Web 应用常见功能的测试,如:

测试场景说明
数据库测试使用 Testcontainers 创建隔离的测试数据库
测试表单验证验证用户输入的有效性
测试文件上传处理头像等文件上传场景
测试邮件发送模拟邮件发送进行账户验证
测试远程 API 调用测试第三方 API 集成
测试「异常」抛出验证业务异常的正确处理
模拟登录用户使用 Spring Security 测试认证和授权

多层次的测试策略

涉及了 Web 应用常见的测试层级:

  • 单元测试:测试 Service、Policy 等单一组件的逻辑
  • 集成测试:测试 Controller 层的完整请求处理流程
  • 容器化测试:使用 Testcontainers + Docker 提供干净的测试环境

企业级技术栈

本项目采用主流的企业级技术栈,学完即可用于实际工作:

技术说明官网
Spring Boot应用框架spring.io/projects/sp…
Spring Security认证和授权框架spring.io/projects/sp…
MyBatisORM 框架www.mybatis.org/mybatis-3/z…
Redis缓存中间件redis.io/
Kafka消息中间件kafka.apache.org/
Flyway数据库版本控制工具github.com/flyway/flyw…
JWTToken 认证支持github.com/jwtk/jjwt
Testcontainers容器化测试工具www.testcontainers.org/
JUnit 5测试框架junit.org/junit5/
MockitoMock 框架site.mockito.org/
AssertJFluent 断言库assertj.github.io/

你将学到什么

完成本教程后,你将能够:

  • ✅ 理解 TDD 的核心思想和实践方法
  • ✅ 使用 JUnit 5 + Spring Test 编写单元测试和集成测试
  • ✅ 使用 Testcontainers 进行数据库和中间件的隔离测试
  • ✅ 测试 Spring Security 保护的受认证接口
  • ✅ 测试表单验证、异常处理、文件上传等常见场景
  • ✅ 使用 Mock 和 Stub 隔离外部依赖
  • ✅ 建立测试驱动开发的信心和习惯

开发环境

工具版本号说明
JDK17+推荐使用 LTS 版本
Maven3.8+依赖管理和构建工具
MySQL8.0通过 Docker 运行
Redis最新通过 Docker 运行
Docker28+通过 Docker 运行
IntelliJ IDEA最新版社区版或正式版均可

注:MySQL、Redis 等中间件均使用 Docker 运行,无需在本地安装

关于源码