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

参考