2Growing Object-Oriented Software, Guided by Tests

测试的概念

测试思维

单元测试集成测试验收测试测试金字塔

🎯 AI 时代的学习建议:不要只读理论。理解这一章的设计动机(为什么需要这个概念?)和边界条件(什么情况下会失效?)。当 AI 生成的代码涉及这些概念时,你能判断它是否用对了场景。AI 能帮你总结内容,但无法替代你亲手阅读、思考、建立直觉的过程。

第2章:测试的概念(The Concept of Test)

一、导读

1.1 本章学习目标

第2章深入探讨了测试的本质。测试不仅仅是验证代码正确性的手段,更是设计工具和质量保障机制。

1.2 为什么第二章如此重要

理解测试的本质——测试是设计的工具,而不仅仅是验证工具——是正确实践 TDD 的前提。

1.3 核心问题引导

单元测试和集成测试有什么区别?

测试金字塔是什么?

什么是行为验证和状态验证?

如何编写好的测试?


二、核心概念详解

2.1 测试金字塔

/  E2E  \          少量端到端测试
       /  集成测试  \       适量集成测试
      /   单元测试    \    大量单元测试

2.2 单元测试

  • 测试单个类或方法
  • 不依赖外部资源
  • 快速、可靠、可重复

2.3 集成测试

  • 测试多个组件的协作
  • 可能依赖数据库、网络等
  • 较慢,但能发现组件间的交互问题

2.4 行为验证 vs 状态验证

java
// 状态验证:检查最终状态
@Test
public void shouldAddItem() {
    cart.add("item1");
    assertEquals(1, cart.size());
}

// 行为验证:检查是否调用了正确的方法
@Test
public void shouldSendEmail() {
    service.register("user@test.com");
    verify(emailSender).send("user@test.com", "Welcome!");
}

三、实战案例

3.1 测试金字塔实践

java
// 单元测试(大量)
@Test void shouldCalculateTotal() { ... }
@Test void shouldApplyDiscount() { ... }

// 集成测试(适量)
@Test void shouldPersistOrder() { ... }

// E2E 测试(少量)
@Test void shouldCompleteCheckout() { ... }

四、本章小结

测试金字塔指导我们编写大量单元测试、适量集成测试和少量 E2E 测试。行为验证和状态验证各有适用场景。


五、思考与练习

为什么单元测试应该最多?

如何编写可维护的测试?

什么时候使用行为验证?什么时候使用状态验证?

测试覆盖率重要吗?

如何处理测试中的随机性?


2/7测试的概
0%