基本例子
unittest模块为用户构建和执行测试用例提供了一组丰富的工具。本节演示一小部分工具,足以满足大部分用户的需求。
以下简短的脚本,用于测试字符串的三个方法:
import unittest
class TestStringMethods(unittest.TestCase):
def test_upper(self):
self.assertEqual('foo'.upper(), 'FOO')
def test_isupper(self):
self.assertTrue('FOO'.isupper())
self.assertFalse('Foo'.isupper())
def test_split(self):
s = 'hello world'
self.assertEqual(s.split(), ['hello', 'world'])
# check that s.split fails when the separator is not a string
with self.assertRaises(TypeError):
s.split(2)
if __name__ == '__main__':
unittest.main()
testcase是通过子类化unittesttest.testcase创建的。上面代码中的三个独立测试用例,用例名字分别都是以test开头定义的,这样的命名方式告诉运行器哪些方法表示测试。
每次测试的关键是调用assertEqual()去校验预期结果;调用assertTrue()和assertFalse()验证条件是否成立;或者是调用assertRaises()验证是否引发特定异常。以上这些方法被用来替代assert语句,因此运行器可以收集所有的结果并生成报告。
setUp()和tearDown()方法允许您定义将在每个测试方法前后执行的指令。在组织测试代码的部分中会更详细地介绍它们。
最后一块展示了一个简单的方法去运行测试用例。unittest.main()提供了测试脚本的命令行界面。从命令行运行时,上面的脚本产生如下输出:
...
----------------------------------------------------------------------
Ran 3 tests in 0.000s
OK
将 -v 选项传递给您的测试脚本将指示unittest.main()启用更高级别的冗余,并产生以下输出:
test_isupper (__main__.TestStringMethods) ... ok
test_split (__main__.TestStringMethods) ... ok
test_upper (__main__.TestStringMethods) ... ok
----------------------------------------------------------------------
Ran 3 tests in 0.001s
OK
上面的示例展示了最常用的unittest特性,这些特性足以满足许多日常测试需求。剩下的文档将从基本原则中探索完整的特性集。