15.5. 总结

单元测试是一个强大的概念,如果实施得当,可以降低维护成本并提高任何长期项目的灵活性。同样重要的是要理解,单元测试不是万能药、神奇的万能解决方案或银弹。编写好的测试用例很难,并且保持它们的更新需要纪律(尤其是在客户急于修复关键错误时)。单元测试不能替代其他形式的测试,包括功能测试、集成测试和用户验收测试。但它是可行的,并且确实有效,一旦你看到它有效,你会想知道没有它你是如何做到的。

本章涵盖了很多内容,其中很多内容甚至不是 Python 特定的。许多语言都有单元测试框架,所有这些框架都要求你理解相同的基本概念

  • 设计具体、自动化和独立的测试用例
  • 在编写代码之前编写测试用例
  • 编写测试用例来测试良好的输入并检查正确的结果
  • 编写测试用例来测试错误的输入并检查正确的错误
  • 编写和更新测试用例以说明错误或反映新的需求
  • 无情地重构以提高性能、可扩展性、可读性、可维护性或你缺乏的任何其他能力

此外,你应该能够轻松地完成以下所有 Python 特定的操作

  • 继承 unittest.TestCase 并为单个测试用例编写方法
  • 使用 assertEqual 检查函数是否返回已知值
  • 使用 assertRaises 检查函数是否引发已知异常
  • 在你的 if __name__ 子句中调用 unittest.main() 以一次运行所有测试用例
  • 以详细模式或常规模式运行单元测试

延伸阅读