一、定位与目标
本书是一本“从 0 到 1,再到深度实战”的 Java 单元测试指南,聚焦 JUnit 5 与 Mockito 3.x 的核心技能,并延伸至 PowerMock、Spring Test、BDD、Hamcrest 等进阶工具。作者用“边讲边练”的方式,带领读者把理论变成可运行的测试代码,最终构建一套快速、可靠、可维护的测试安全网。
二、内容纵览
Part 1 JUnit 5 基础与进阶(第 1~20 章)
- 单元测试价值与 FIRST 原则
- JUnit 5 注解生命周期:@Test、@BeforeEach、@AfterEach、@ParameterizedTest、@Timeout、@Tag
- 断言体系:assertEquals、assertTrue、assertThrows、assertAll、assertTimeoutPreemptively
- 数组、集合、异常、性能、参数化、测试套件等专项技巧
- 测试坏味道识别与重构: flaky test、慢测试、过度断言、数据污染
Part 2 Mockito 入门与桩件(Stub)技术(第 21~30 章)
- Maven/Gradle 依赖管理,@Mock、@InjectMocks、@RunWith(MockitoJUnitRunner.class)
- 系统被测对象(SUT)与协作者(Collaborator)划分
- when(...).thenReturn()、doNothing()、thenThrow() 基础桩件
- 参数匹配器:any()、eq()、argThat()、自定义 Matcher
- BDD 风格:given(...).willReturn() + then(mock).should()
Part 3 Mockito 高级武器库(第 31~52 章)
- 连续桩件、thenAnswer() 动态应答、Spy 部分 mock
- ArgumentCaptor 参数捕获与多参数捕获
- Hamcrest 匹配器:hasItem、closeTo、allOf、自定义 Matcher
- Mockito 注解全家桶:@Captor、@Spy、@MockBean(Spring)
- Spring Boot 集成:@SpringBootTest、@DataJpaTest、@WebMvcTest、@SpyBean
- 测试切片与 CI 流水线对接
Part 4 PowerMock 黑科技(第 53~62 章)
- 静态方法 mock:mockStatic()、verifyStatic()
- 私有方法 Whitebox.invokeMethod()、doReturn()…when() 局部打桩
- 构造函数拦截:whenNew、withArguments、suppress 构造器
- Final 类/方法、系统类(System、Math、Time)打桩
- 使用底线:能重构不滥用,能注入不 PowerMock
Part 5 原则与最佳实践(第 63 章 & 结语)
- 测试金字塔与 80/20 原则
- 可读性、隔离性、可重复性、及时性
- 代码评审与测试重构循环
- 持续交付中的测试分层:单元→组件→契约→端到端
三、特色与亮点
- 全程示例驱动:每章配套可编译的 GitHub 级源码,拒绝“伪代码”。
- 场景化讲解:电商下单、库存、支付、运费、折扣、通知等完整业务链路贯穿始终,测试不再“算加法”。
- 工具链无缝衔接:JUnit 5 → Mockito → Hamcrest → Spring Test → PowerMock,一张依赖图搞掂。
- 坏味道雷达:总结 20+ 测试坏味道与对应重构手法,让测试代码比生产代码更整洁。
- 性能与 CI 友好:@Tag 分类、并行执行、Surefire/Gradle 筛选、Nightly 慢测试策略,一套配置直接落地。
四、适合读者
- Java 初中级开发者:系统掌握现代单元测试技能,摆脱“打印日志式调试”。
- 测试左移推动者:想在需求阶段写可执行规格,用 BDD 语言对齐业务、开发、测试三方。
- 遗留代码拯救者:面对大量 static、private、final 等“无法测试”代码,需要 PowerMock 应急与重构并行。
- Spring 全家桶用户:希望利用 Spring Boot Test 切片技术,既跑得快又测得准。
五、阅读路径建议
- 新手上路:Part 1 全读 → 跟着源码把购物车测试跑绿。
- Mockito 深入:Part 2 & 3 逐章实战,重点吃透 ArgumentCaptor 与 Hamcrest 组合。
- Spring 项目:直接跳到 Part 3 末 + Part 4 前,掌握 @MockBean、@SpyBean、@DataJpaTest。
- 遗留战场:Part 4 当手册,先解决静态工具类,再逐步重构降低 PowerMock 使用频次。
- 团队规范:把 Part 5 打印贴墙,作为代码评审的测试 checklist。
六、一句话总结
《Java Unit Testing with JUnit and Mockito》用一条“绿条”主线,把 Java 单元测试的“why-what-how”串成可落地的技能树:先让测试跑得又快又稳,再用 Mockito 隔离复杂依赖,最后用 PowerMock 扫清遗留死角,助你交付“敢重构、可演进、睡得香”的高质量代码。