技术开发 频道

测试驱动开发之可执行的文档

  【IT168 评论】TDD已经发展多年,然而却仍未能普遍成为日常开发的实践之一,很多人在尝试使用TDD时遭遇了困难,并对TDD心存疑惑。我并非TDD方面的权威或专家,但希望能将我的经验和感想记录下来,希望能对某些仍对TDD有所困惑的人有所帮助,同时也希望能够听到不同的声音,共同交流与讨论。

  本教程不是工具的使用教程,也不是TDD入门知识普及教程,因此这里不会告诉你TDD是什么,TDD的工具如何使用。关于TDD的基本概念和工具的使用,已经有很多文档可以参考,请自行学习。

  测试驱动开发之可执行的文档

  “编写单元测试更多是一种设计行为、文档行为而不是单纯的验证行为。 编写单元测试缩短了很多反馈周期;其中至少缩短了功能的验证周期。” - Robert C. Martin

  对于TDD的验证功能(测试功能)大家都不陌生,也很好理解,可是对于TDD的文档功能却有很多人不了解。

  项目中的文档可以分很多种,例如需求文档、设计文档、用户手册、维护手册等等。这些文档可能是打印出来的,也可能以电子形式存在,而其内容可能是文字、图表、图形甚至是视频。今天我们讨论的文档偏向于设计文档,其他文档并不涉及。

  设计文档一般有两种用途,在程序开发出来之前,设计文档用于指导编码,而在编码之后,设计文档用于帮助理解代码。MSDN中的类库参考也是一种设计文档(同时也是帮助文档),它描述了类库的使用方式和它们之间的联系,更重要的是其中有很多的例子可以帮我们理解如何使用这些类库。那么这和TDD有什么关系呢?

  我们先看一个例子:

  public void twelve_inches_should_equal_to_one_foot()

  {

  Inch twelveInches = new Inch(12);

  Foot oneFoot = new Foot(1);

  Assert.AreEqual(twelveInches, oneFoot);

  }

  public void one_foot_plus_two_inches_should_equal_to_fourteen_inches()

  {

  Foot oneFoot = new Foot(1);

  Inch twoInches = new Inch(2);

  Inch fourteenInches = new Inch(14);

  Assert.AreEqual(oneFoot.Plus(twoInches), fourteenInches);

  }

  可以看到,TDD的测试用例实际上也是一个个使用这些类和函数的例子,测试函数的名称就是测试所要表达的意图,测试代码就是实现这种意图的方式。你可以从测试代码中得到以下信息:这个函数或类能干什么,约束条件是什么,何时会引发异常,合理的输入范围是什么,对应于输入的输出是什么,如何调用这些API等等。

0
相关文章