- 什么是单元测试
- 为什么需要单元测试
- JUnit 5 环境搭建与第一个测试用例
- @Test、@BeforeEach、@AfterEach
- @BeforeAll、@AfterAll
- 生命周期与执行顺序
- assertEquals / assertTrue / assertFalse
- assertNull / assertThrows
- 常用断言方法详解
- @Suite / @Order / @TestMethodOrder
- 组织大型测试集
- @ParameterizedTest / @ValueSource
- @CsvSource / @MethodSource
- 数据驱动测试
- @RepeatedTest / @Disabled
- @EnabledOnOs / @EnabledIf
- 条件注解
- 为什么需要 Mock
- Mockito 核心概念
- Mock 与 Spy 的区别
- when().thenReturn() / doThrow()
- verify() 模拟依赖行为
- ArgumentMatchers / Answer 接口
- @InjectMocks 自动注入
- 处理静态方法 / 构造函数
- final 类 Mock 难题
- JaCoCo 插件配置
- 行覆盖率 / 分支覆盖率
- 解读覆盖率报告
- @SpringBootTest / @WebMvcTest
- @DataJpaTest 切片测试
- MockMvc 的使用
- GET/POST 请求模拟
- JSON 响应验证
- 隔离测试 Service 逻辑
- Mock Repository 依赖
- @DataJpaTest / 嵌入式数据库 H2
- 测试数据准备
- Testcontainers 框架
- Docker 容器化数据库测试
- RestTemplate / WebTestClient
- 端到端接口验证
- 测试 Kafka/RabbitMQ 生产者消费者
- Embedded Kafka
- 测试 Redis 缓存逻辑
- @Cacheable / @CacheEvict 验证
- Spring Security 测试
- 模拟认证用户 / 测试接口权限
- 模拟文件上传下载
- Mock 外部 HTTP 服务 (WireMock)
- @Sql 注解 / 测试数据工厂
- Builder 模式构建测试对象
- Spring Cloud Contract 基础
- 消费者驱动契约测试
- Jenkins/GitHub Actions 配置
- 测试阶段自动化 / 失败分析
- 为老项目添加测试
- Characterization Test / 重构安全网
- 红绿重构循环
- TDD 实战案例 / 常见误区与最佳实践