unittest包含四个重要概念

  • Test Case
  • Test Suit
  • Test Fixture
  • Test Runner

    Testcase

    一个TestCase的实例就是一个测试用例。什么是测试用例呢?就是一个完整的测试流程,包括测试前准备环境的搭建(setUp),执行测试代码 (run),以及测试后环境的还原(tearDown)。元测试(unit test)的本质也就在这里,一个测试用例是一个完整的测试单元,通过运行这个测试单元,可以对某一个问题进行验证。

    Test suite

    多个测试用例集合在一起,就是TestSuite,而且TestSuite也可以嵌套TestSuite。
    Test runner:
    是来执行测试用例的,其中的run(test)会执行TestSuite/TestCase中的run(result)方法。

    TestLoader

    是用来加载TestCase到TestSuite中的,其中有几个loadTestsFrom__()方法,就是从各个地方寻找TestCase,创建它们的实例,然后add到TestSuite中,再返回一个TestSuite实例。

    Test fixture

Test Fixture代表执行一个或多个测试所需的环境准备,以及关联的清理动作。例如,创子建临时或代理数据库、目录或启动服务器进程。

拿setUp /tearDown来说:
那么可以在setUp() 中建立数据库连接以及进行一些初始化,在tearDown()中清除在数据库中产生的数据,然后关闭连接。注意tearDown的过程很重要,要为以后的 TestCase留下一个干净的环境。关于fixture,还有一个专门的库函数叫做fixtures,功能更加强大。

Testcase实战

  1. # 全正确的用例
  2. import unittest
  3. # 被测试的函数
  4. def add(a, b):
  5. return a + b
  6. # 1、必须创建一个测试类,而且,这个类必须继承 unittest.TestCase
  7. class MyTest(unittest.TestCase):
  8. # 2、测试方法(用例)要示必须以“test”开头
  9. def test_case(self):
  10. c = add(3, 5)
  11. self.assertEqual(c, 8)
  12. if __name__ == '__main__':
  13. unittest.main()

tmp.gif

  1. # 有错误的用例
  2. import unittest
  3. class MyClass(unittest.TestCase):
  4. def setUp(self):
  5. print("====> start class")
  6. def tearDown(self):
  7. print("===> end class")
  8. def test_case(self):
  9. print("---->test case")
  10. self.assertEqual(3, 4)
  11. if __name__ == '__main__':
  12. unittest.main()

image.png