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:

 

评分:0

我来说两句

Open Toolbar