第15章 可测试性的设计

高质量的程序必须写自动化测试,需要尽最大的努力来确保软件是工作的。黄金法则是为了可交付性,功能必须包含单元测试。

没有自动化测试的情况下,功能就不能被确保是工作的并且不应该被使用。正如Kent Beck在极限编程中所提到的:“任何没有经过自动测试的功能就等于不存在的功能”。

关于程序功能的自动化测试,有两个基本点。

  • 自动化:这意味着没有人工的评审工作。测试包含了一个脚本,用于对比实际结果和期望的结果。
  • 功能:它们会被隔离进行测试,来确保可以独立工作。这是单元测试,意味着每个单元中包含了足够的信息来实现指定功能。理想情况下,它是很小的单元,例如一个类。然而,也可以是更大的单元,例如模块或者包。

在Python中内置了两个测试框架,简化了自动化测试的编码。接下来会介绍如何使用doctestunittest来做自动化测试。为了使测试更实用,会介绍几点在单元测试时需要考虑到的地方。

有关更详细的内容,可以阅读OttingerLangrFIRSTFast Isolated Repeatable Self-validating Timely)特性:速度快、隔离、可重复、自我验证和及时。大多数情况下,可重复和自我验证需要一个自动化测试框架。及时意味着测试的编写要早于被测试的代码。参见http://pragprog.com/magazines/2012-01/unit-tests-are-first

因为测试是基本的,可测试性在设计的考虑过程中是一个重要的环节。设计也必须要支持测试和调试,因为不使用的类是没有价值的。一个类需要被证明是可以工作的,这一点是很重要的。

理想情况下,会希望有一个测试的层次结构。最底层是单元测试。在这里,我们对每个类或函数进行隔离测试是为了确保它符合API的标准。每个类或函数在测试中都是一个单元。在单元测试上面是集成测试。一旦可以确定每个类或函数是可以独立工作的,就可以对一组类进行测试。也可以测试整个模块和整个包。完成集成测试之后,就可以对整个应用进行自动化测试。 ...

Get Python面向对象编程指南 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.