unittest 基本示例
unittest 模块提供了一组丰富的工具,用于构造和运行测试。本节演示了一小部分工具足以满足大多数用户的需求。
下面是一个测试三个字符串方法(这三个方法分别为upper方法,isupper和split()方法)的简短脚本:
import unittest
class TestStringMethods(unittest.TestCase):
#测试upper方法,测试字符串'foo'使用upper方法后是否返回'FOO'
def test_upper(self):
self.assertEqual('foo'.upper(), 'FOO')
#测试isupper方法,测试字符串'FOO'使用isupper方法后是否返回true,测试字符串'Foo'使用isupper后是否返回false
def test_isupper(self):
self.assertTrue('FOO'.isupper())
self.assertFalse('Foo'.isupper())
#测试split方法,测试字符串s能不能被正常的分割为两个字符串(存在列表中)
def test_split(self):
s = 'hello world'
self.assertEqual(s.split(), ['hello', 'world'])
# 当分隔符不是字符串时,检查 s.split 是否失败
with self.assertRaises(TypeError):
s.split(2)
if __name__ == '__main__':
unittest.main()
测试用例是通过继承 unittest.TestCase 来创建的。这三个单独的测试是用名称以字母 test
开头的方法定义的。此命名约定告知测试运行程序哪些方法代表测试。
每个测试的关键是调用 assertEqual() 以检查预期结果; assertTrue() 或 assertFalse() 验证条件;或 assertRaises() 以验证是否引发了特定异常。这些方法用于代替 assert 语句,因此测试运行者可以累积所有测试结果并生成报告。
setUp() 和 tearDown() 方法允许您定义将在每个测试方法之前和之后执行的指令。它们在组织测试代码部分中有更详细的介绍。
最后一个块显示了一种运行测试的简单方法。 unittest.main() 为测试脚本提供了一个命令行界面。从命令行运行时,上面的脚本会生成如下所示的输出:
... ---------------------------------------------------------------------- Ran 3 tests in 0.000s OK
假设上述代码保存在一个叫test.py的文件中,那么运行该代码为
python -m unittest test.py
将-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
传递-v选项是在命令行中传递的,
假设上述代码保存在一个叫test.py的文件中,那么运行该代码为python -m unittest -v test.py
上面的例子显示了unittest最常用的功能,这些功能足以满足许多日常测试需求。本文档的其余部分从第一原则开始探讨完整的功能集。
更多建议: