unittest 单元测试框架是受到 JUnit 的启发,与其他语言中的主流单元测试框架有着相似的风格。其支持测试自动化,配置共享和关机代码测试。支持将测试样例聚合到测试集中,并将测试与报告框架独立。
测试示例,测试三种字符串方法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
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()
|
继承 unittest.TestCase 就创建了一个测试样例。
unittest.main() 提供了一个测试脚本的命令行接口。
命令行运行该测试脚本
1
2
3
4
5
6
|
python test_string.py
...
----------------------------------------------------------------------
Ran 3 tests in 0.000s
OK
|
添加运行参数 -v
, 输出详细信息。
1
2
3
4
5
6
7
8
9
|
python test_string.py -v
test_isupper (__main__.TestStringMethods.test_isupper) ... ok
test_split (__main__.TestStringMethods.test_split) ... ok
test_upper (__main__.TestStringMethods.test_upper) ... ok
----------------------------------------------------------------------
Ran 3 tests in 0.000s
|
unittest 模块可以通过命令行运行模块、类和独立测试方法的测试:
1
2
3
4
5
6
7
8
9
10
|
python -m unittest test_string.TestStringMethods -v
test_isupper (test_string.TestStringMethods.test_isupper) ... ok
test_split (test_string.TestStringMethods.test_split) ... ok
test_upper (test_string.TestStringMethods.test_upper) ... ok
----------------------------------------------------------------------
Ran 3 tests in 0.000s
OK
|
指定单个独立的测试方法:
1
2
3
4
5
6
7
8
|
python -m unittest test_string.TestStringMethods.test_upper -v
test_upper (test_string.TestStringMethods.test_upper) ... ok
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
|
更多测试参数和方法探索,及 mock
参考