15.5. 小结
单元测试是一个强大的概念,使用得当的话既可以减少维护成本又可以增加长期项目的灵活性。同样重要的是要意识到单元测试并不是“灵丹妙药”,也不是“银弹”。编写好的测试用例很困难,保持其更新更需要磨练 (特别是当顾客对修复严重的 Bug 大呼小叫之时)。单元测试不是其它形式测试的替代品,比如说功能性测试、集成测试以及可用性测试。但它切实可行且功效明显,一旦相识,你会反问为什么以往没有应用它。
这一章涵盖了很多内容,有很多都不是 Python 所特有的。很多语言都有单元测试框架,都要求你理解相同的基本概念:
- 测试用例的设计方针是目的单一、可以自动运行、互不干扰。
- 在被测试代码编写之前 编写测试用例。
- 编写测试有效输入的测试用例并检查正确的结果。
- 编写测试无效输入的测试用例并检查正确的失败。
- 为描述 Bug 或反映新需求而编写和升级测试用例。
- 为改进性能、可伸缩性、可读性、可维护性和任何缺少的特性而无情地重构。
另外,你应该能够自如地做到如下 Python 的特有工作:
- 继承
unittest.TestCase
生成子类并为每个单独的测试用例编写方法。 - 使用
assertEqual
检查已知结果的返回。 - 使用
assertRaises
检查函数是否引发已知异常。 - 在
if __name__
子句中调用unittest.main()
来一次性运行所有测试用例。 - 以详细 (verbose) 或者普通 (regular) 模式运行单元测试
进一步阅读
- XProgramming.com 有多种语言的 单元测试框架 的下载链接。