unittest模块(单元测试)
单元测试概念:
软件中的最小可测试单元进行检查和验证
unittest四大部分:
Test fixture: 就是运行被测软件所需要的一切东西,这个“东西”不单只是数据,同时还包括对被测软件的准备,例如实例化某个被测方法所在的类,准备数据库的ConnectionString等。通常来说,有三种方法来准备Test Fixture(内联,委托,隐式);
Test case测试用例;
Test suite测试用例(Test case)的集合;
Test runner执行测试用例。
示例:
>>> import unittest
>>> class Test_x(unittest.TestCase):
... def setUp(self):
... self.seq=1
... def test_a(self):
... return self.seq+1
... def test_b(self):
... return self.seq+2
...
>>> if __name__=="__main__":
... unittest.main()
执行过程:
Test_x继承unittest.TestCase类,setUp是准备测试(Test Fixture);例子中一共有两个testcase,组成了一个testsuite;loader.TestLoader类中有一个loadTestsFromTestCase()方法是加载测试用例(TestLoader);最后通过unittest.main()运行所有测试用例。
testsuite(测试用例集合)生成核心语句:
testCaseNames中的每一个元素,使用testCaseClass为其构造对象,其结果是一个TestCase的对象集合。
loadTestsFromTestCase()方法核心是下面这句:
self.suiteClass(map(testCaseClass, testCaseNames))
等同于:
testcases = []
for name in testCaeNames:
testcases.append(TestCase(name))
loaded_suite = self.suiteClass(tuple(testcases))
setUpClass方法核心:
setUpClass()在一个测试类中在所有test用例开始之前,执行一次且必须使用到Testsuite(只有在TestSuite的run方法里面才对其调用):
如果在执行过程中想改变setUpClass定义变量值,可以把值定义成列表类型等可变类型。
tearDownClass方法:
tearDownClass()在一个测试类中在所有test结束之后,执行一次且必须使用到Testsuite(只有在TestSuite的run方法里面才对其调用)
测试过程当中需要对用例进行一些特殊处理,比如标记用例失败忽略@unittest.expectedFailure,跳过执行@unittest.skip