作者:杨冬 欢迎转载,也请保留这段声明。谢谢!
出处: 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.py
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']) # check that s.split fails when the separator is not a string with self.assertRaises(TypeError): s.split(2) def tearDown(self): pass if __name__ == '__main__': unittest.main()使用python test.py运行该文件后,结果如下:
... ---------------------------------------------------------------------- Ran 3 tests in 0.000s OK如果在测试脚本后面加入-v参数,如python test.py -v,则会显示更详细的测试信息:
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的官方文档中找到。