Python中unittest的用法
上一篇 /
下一篇 2017-08-23 08:53:24
/ 个人分类:Python
1. unittest module包含了编写运行unittest的功能,自定义的test class都要集成unitest.TestCase类,
test method要以test开头,运行顺序根据test method的名字排序如:
import unittest
class Math():
"""docstring for Math"""
def __init__(self, a,b):
self.a = int(a)
self.b = int(b)
def add(self):
return self.a + self.b
def sub(self):
return self.a - self.b
class TestStartEnd(unittest.TestCase):
"""docstring for TestStartEnd"""
def setUp(self):
print('!!!!!Test Start!!!!!!')
def tearDown(self):
print('~~~~~Test Finish~~~~~~')
class TestSub(TestStartEnd):
def test_sub1(self):
j = Math(-1,-5)
self.assertEqual(j.sub(),4)
print('test d')
def test_sub(self):
j = Math(5,2)
self.assertEqual(j.sub(),3)
print('test c')
class TestAdd(TestStartEnd):
def test_add(self):
j = Math(3,5)
self.assertEqual(j.add(),8)
print('test a')
def test_add1(self):
j = Math(-1,-3)
self.assertEqual(j.add(),-4)
print('test b')
if __name__ == '__main__':
unittest.main()
上例的运行结果为
test a -> b ->c ->d
如果将上面的test_add1改名为_test_add1,则这个案例将不会被执行。
如果test method想用自己定义的函数名字或者按照自己想要的顺序,在调用的时候,要指明需要调用的是哪个函数。
if __name__ == '__main__':
suite = unittest.TestSuite()
suite.addTest(TestAdd('test_add'))
suite.addTest(TestAdd('test_add1'))
suite.addTest(TestSub('test_sub'))
suite.addTest(TestSub('test_sub1'))
runner = unittest.TextTestRunner()
runner.run(suite)
====================================================
特殊方法:
① setup():每个
测试函数运行前运行
② teardown():每个测试函数运行完后执行
③ setUpClass():必须使用@classmethod 装饰器,所有test运行前运行一次
④ tearDownClass():必须使用@classmethod装饰器,所有test运行完后运行一次
2.unittest中提供很多断言方法,如assertEqual,可以根据实际情况来选择。
3.跳过测试
可以使用unitest.skip装饰器族跳过test method或者test class,这些装饰器包括:
① @unittest.skip(reason):无条件跳过测试,reason描述为什么跳过测试
② @unittest.skipif(conditition,reason):condititon为true时跳过测试
③ @unittest.skipunless(condition,reason):condition不是true时跳过测试
如,上例中在class TestSub前加上@unittest.skip('skip TestSub'),那么将不会执行该
测试用例。
4.预期失败
expected failure:使用@unittest.expectedFailure装饰器,如果test失败了,这个test不计入失败的case数目。一般在不需要测试某些用例的时候用。
收藏
举报
TAG: