1.1 TDD的基本流程:红-绿-重构循环

测试驱动开发遵循这样一个三阶段的流程:

1.红(Red)。意思是指编写一个失败的(也就是无法通过的)测试,这里所说的失败,包括无法通过编译的情况〔也包括虽然能够通过编译,但是在运行的时候无法满足需求的情况〕。我们运行测试套件(test suite),以确认这种测试确实无法通过。

2.绿(Green)。意思是我们只编写最少量的代码,让测试得以通过。我们运行测试套件,以确认这样写确实能让测试通过。

3.重构(Refactor)。意思是我们把代码坏味(code smell,又叫代码异味,也就是有坏味的、不良的代码)给除掉。这种代码包括重复的代码、用硬编码的值(也就是写死的值)来实现的代码,以及那种未能采用某语言所推荐的编程机制来书写的代码(比方说,你本应使用该语言内置的迭代器机制,但却手工编写了一个繁杂的循环结构)。如果我们在重构过程中把测试给破坏了,那么应该先让测试变绿〔也就是恢复到能够通过测试的状态〕,然后再结束该环节。

这就是红-绿-重构循环(Red-Green-Refactor cycle, RGR环),如图1-1所示。该循环的三个环节正是测试驱动开发的三个基本要素。本书接下来就要遵照这样的循环来编写代码。

图1-1:红-绿-重构循环是测试驱动开发的基础

红-绿-重构循环中的这三个环节是TDD的基本要素。

遵循RGR环做开发

整本书都会遵循RGR环中的三个步骤来做开发。我们会相当严格地遵守这套纪律,大家刚开始一定要慢一些,等熟悉了之后再提速。这一章会明确用三节来演示这三个步骤。从第2章开始,我们会更迅速地(而且通常也是更顺畅地)从第一个环节(红)进入第二个环节(绿),然后进入第三个环节(重构),到了那个环节,我们会把注意力放在寻找应该重构的代码上。我们的开发速度快起来之后,这种从一个环节进入下一个环节的速度也会相应变快。然而无论如何,这三个环节都在,而且会按照先红,再绿,最后重构的顺序执行。