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实战
# 全正确的用例
import unittest
# 被测试的函数
def add(a, b):
return a + b
# 1、必须创建一个测试类,而且,这个类必须继承 unittest.TestCase
class MyTest(unittest.TestCase):
# 2、测试方法(用例)要示必须以“test”开头
def test_case(self):
c = add(3, 5)
self.assertEqual(c, 8)
if __name__ == '__main__':
unittest.main()
# 有错误的用例
import unittest
class MyClass(unittest.TestCase):
def setUp(self):
print("====> start class")
def tearDown(self):
print("===> end class")
def test_case(self):
print("---->test case")
self.assertEqual(3, 4)
if __name__ == '__main__':
unittest.main()