作者:杨冬 欢迎转载,也请保留这段声明。谢谢!
出处:https://andyyoung01.github.io/ 或 http://andyyoung01.16mb.com/
unittest测试框架是Python的内置模块。它与其它语言的单元测试框架如JUnit类似。本文简单看一下此模块的使用。
unittest模块一般的使用流程如下:
- import unittest
- 定义一个继承自unittest.TestCase的测试用例类
- 定义setUp和tearDown,在每个测试用例前后做一些辅助工作。
- 定义测试用例,名字以test开头。
- 一个测试用例应该只测试一个方面,测试目的和测试内容应很明确。主要是调用assertEqual、assertRaises等断言方法判断程序执行结果和预期值是否相符。
- 调用unittest.main()启动测试
- 如果测试未通过,会输出相应的错误提示。如果测试全部通过则不显示任何东西,这时可以添加-v参数显示详细信息。
下面看一个基本的实例:
test.py1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| import unittest class TestStringMethods(unittest.TestCase): def setUp(self): pass 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']) with self.assertRaises(TypeError): s.split(2) def tearDown(self): pass if __name__ == '__main__': unittest.main()
|
使用python test.py运行该文件后,结果如下:
1 2 3 4 5
| ... ---------------------------------------------------------------------- Ran 3 tests in 0.000s OK
|
如果在测试脚本后面加入-v参数,如python test.py -v,则会显示更详细的测试信息:
1 2 3 4 5 6 7 8
| test_isupper (__main__.TestStringMethods) ... ok test_split (__main__.TestStringMethods) ... ok test_upper (__main__.TestStringMethods) ... ok ---------------------------------------------------------------------- Ran 3 tests in 0.001s OK
|
如果在一个文件夹中有多个测试源文件,要运行所有的这些源文件,对于每个文件都运行一个命令是非常烦人的。这时候使用test discovery就非常方便了。假设所有的测试源代码文件都保存在tests文件夹中,则只要运行python -m unittest discover tests
就可以将该文件夹中所有的测试文件都运行一遍。
与unittest相关的更详细的其它信息可以在Python的官方文档(或中文翻译)中找到。