2 unittest基本用法

我们通过最简单的例子来看一下unittest的基本用法

import unittest

class Test(unittest.TestCase):

    def setUp(self):
        print('hello')

    def tearDown(self):
        print('bye')

    def test_001(self):
        print('001')

    def test_002(self):
        print('002')

    def test_003(self):
        print('003')

    def func(self):
        print('func')

if __name__ == '__main__':
    unittest.main()

解释一下关键点:

  • 可以通过继承unittest.TestCase类来定义我们自己的测试用例,1个测试用例类下面可以有多个测试方法(test)或者叫做测试点
  • 测试用例中方法名以test开头的方法才是测试方法,比如上面的例子里定义了3个以test开头的方法,分别是test_001,test_002和test_003。非测试方法是不会被test runner执行的
  • setUp和tearDown这两个方法,这两个方法在测试方法执行前后会被自动调用,主要用作预处理和清理。这两个方法就是我们说的test fixture
  • 通过上面的测试代码我们可以看到,在调用uniitest.main()的时候,框架自动的调用了Test类,因为Test继承自unittest.TesetCase类,所以会被框架识别为测试用例,
  • 最后, unittest.main提供了最简单的运行用例的方式。

当我们从命令行运行上面的代码时,我们可以看到如下的输出

001
002
003
----------------------------------------------------------------------
Ran 3 tests in 0.000s

OK

除了使用unittest.main,还有其他的方式可以运行测试用例,比如把最后2行替换为

# 创建一个测试套件,并向其中加载测试用例
suite = unittest.TestLoader().loadTestsFromTestCase(Test)
# 显式运行测试没并且通过设置verbosity设定对每一个测试方法产生测试结果
unittest.TextTestRunner(verbosity=2).run(suite)

运行用例,结果将会如下所示

001
002
003

test_001 (__main__.Test) ... ok
test_002 (__main__.Test) ... ok
test_003 (__main__.Test) ... ok

----------------------------------------------------------------------
Ran 3 tests in 0.001s

OK