3.8 测试要做到FIRST
在Agile in a Flash[OL11]一书中,Tim Ottinger和Jeff Langr给我们讲述了5个单元测试的关键属性。高效的测试需要做到FIRST。
F Fast(快速的): 测试要快速,快到程序员可以在每个微小的改动后都运行它们而且不会打断工作流。
I Isolated(独立的): 测试用例要是独立的。一个测试不会为另一个测试创建环境。测试中的失败也要分离开。
R Repeatable (可重复的): 测试要可以重复地去运行。可重复意味着自动化。一个循环中的测试总是给出同样的结果。
S Self-verifying(自校验的): 测试会自己检查产出,通过时只给出简单的“OK”,失败时给出详细的细节。
T Timely(及时的): 测试要及时做。程序员要及时写测试,与写产品代码紧连(但必须是在前面)来防止软件bug的产生。
这对于用C来做测试驱动开发来讲很有挑战。TDD最容易应用在完备的功能单元上,而对于通常的C编程实践来讲,常常缺失完备的功能单元。模块的边界不是很清楚,并且语言本身的结构对此的帮助很有限。
在面向对象语言中,函数围绕着通用的数据而聚集在一起,数据由函数定义的接口来访问。语言本身直接支持完备单元。完备单元的可测性更好。这就是为什么TDD在应用于面向对象的编程语言时更自然的原因。虽然C并不是面向对象语言,但是这并不能阻止我们从面向对象世界中学到有价值的知识。
当我们的测试做到了FIRST,那么它将引导我们产出模块化的设计,这样的设计支持当前的测试。让我们拭目以待,来看如何让代码模块化并可测。
时间: 2024-09-20 22:10:10