基本例子

unittest模块为用户构建和执行测试用例提供了一组丰富的工具。本节演示一小部分工具,足以满足大部分用户的需求。

以下简短的脚本,用于测试字符串的三个方法:

  1. import unittest
  2. class TestStringMethods(unittest.TestCase):
  3. def test_upper(self):
  4. self.assertEqual('foo'.upper(), 'FOO')
  5. def test_isupper(self):
  6. self.assertTrue('FOO'.isupper())
  7. self.assertFalse('Foo'.isupper())
  8. def test_split(self):
  9. s = 'hello world'
  10. self.assertEqual(s.split(), ['hello', 'world'])
  11. # check that s.split fails when the separator is not a string
  12. with self.assertRaises(TypeError):
  13. s.split(2)
  14. if __name__ == '__main__':
  15. unittest.main()

testcase是通过子类化unittesttest.testcase创建的。上面代码中的三个独立测试用例,用例名字分别都是以test开头定义的,这样的命名方式告诉运行器哪些方法表示测试。

每次测试的关键是调用assertEqual()去校验预期结果;调用assertTrue()和assertFalse()验证条件是否成立;或者是调用assertRaises()验证是否引发特定异常。以上这些方法被用来替代assert语句,因此运行器可以收集所有的结果并生成报告。

setUp()和tearDown()方法允许您定义将在每个测试方法前后执行的指令。在组织测试代码的部分中会更详细地介绍它们。

最后一块展示了一个简单的方法去运行测试用例。unittest.main()提供了测试脚本的命令行界面。从命令行运行时,上面的脚本产生如下输出:

  1. ...
  2. ----------------------------------------------------------------------
  3. Ran 3 tests in 0.000s
  4. OK

将 -v 选项传递给您的测试脚本将指示unittest.main()启用更高级别的冗余,并产生以下输出:

  1. test_isupper (__main__.TestStringMethods) ... ok
  2. test_split (__main__.TestStringMethods) ... ok
  3. test_upper (__main__.TestStringMethods) ... ok
  4. ----------------------------------------------------------------------
  5. Ran 3 tests in 0.001s
  6. OK

上面的示例展示了最常用的unittest特性,这些特性足以满足许多日常测试需求。剩下的文档将从基本原则中探索完整的特性集。