10.11. 质量控制

开发高质量软件的一种方法是在开发过程中为每个函数编写测试,并在开发过程中经常运行这些测试。

doctest 模块提供了一个工具,用于扫描模块并验证程序文档字符串中嵌入的测试。测试构造就像将典型调用及其结果剪切并粘贴到文档字符串一样简单。这通过向用户提供示例来改进文档,并且它允许doctest模块确保代码保持对文档的真实:

  1. def average(values):
  2. """Computes the arithmetic mean of a list of numbers.
  3.  
  4. >>> print(average([20, 30, 70]))
  5. 40.0
  6. """
  7. return sum(values) / len(values)
  8.  
  9. import doctest
  10. doctest.testmod() # automatically validate the embedded tests

unittest 模块不像 doctest 模块那样易于使用,但它允许在一个单独的文件中维护更全面的测试集:

  1. import unittest
  2.  
  3. class TestStatisticalFunctions(unittest.TestCase):
  4.  
  5. def test_average(self):
  6. self.assertEqual(average([20, 30, 70]), 40.0)
  7. self.assertEqual(round(average([1, 5, 7]), 1), 4.3)
  8. with self.assertRaises(ZeroDivisionError):
  9. average([])
  10. with self.assertRaises(TypeError):
  11. average(20, 30, 70)
  12.  
  13. unittest.main() # Calling from the command line invokes all tests