单元测试unittest

官网地址:https://docs.python.org/3/library/unittest.html

编写一个单元测试类,我们只需要按照如下几个步骤进行就可以啦!

  1. 编写一个类继承unittest.TestCase
  2. 编写以test开头的函数
  3. 调用unittest.main()

示例代码如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
class TestClass02(unittest.TestCase):

    def testBbb(self):
        print("测试方法testBbb执行啦!")

    def testAaa(self):
        print("测试方法testAaa执行啦!")

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

注意:这里面方法的调用顺序是按照字母排列顺序调用的, 也就是testAaa执行完之后再执行testBbb

如果你想自己执行测试的顺序,需要额外按照如下规则来执行

1
2
3
4
5
6
7
if __name__ == '__main__':
    suite = unittest.TestSuite()
    suite.addTest(TestClass02("testBbb"))
    suite.addTest(TestClass02("testAaa"))

    textRunner = unittest.TextTestRunner()
    textRunner.run(suite)

除了上面这样的基本操作之外,TestCase还提供了两个比较有用的方法

  • setUp : 每个测试方法执行之前执行
  • tearDown: 每个测试方法执行之后执行
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
class TestClass01(unittest.TestCase):
    def setUp(self):
        # print("执行每个单元测试方法会调用!")
        pass

    def testXxx(self):
        print("测试>>>>:","TestClass01",self.num)

    def tearDown(self):
        # print("执行每个单元测试方法结束时会调用!")
        pass

如果有某个测试方法不想测试了,又不想删除代码,可以使用装饰器

1
2
3
@unittest.skip("请说出你不想测试的原因")
def testSkip(self):
    print("测试>>>>:","skip")

在TestCase中还包含有很多帮助我们断言的函数

Method Checks that
assertEqual(a, b) a == b
assertNotEqual(a, b) a != b
assertTrue(x) bool(x) is True
assertFalse(x) bool(x) is False
assertIs(a, b) a is b
assertIsNot(a, b) a is not b
assertIsNone(x) x is None
assertIsNotNone(x) x is not None
assertIn(a, b) a in b
assertNotIn(a, b) a not in b
assertIsInstance(a, b) isinstance(a, b)
assertNotIsInstance(a, b) not isinstance(a, b)