Unittest用例管理

新增用例

前面是针对单个add方法来进行单元测试,如果需要多个方法来进行测试,该如何处理?如新增一个Sub方法来进行单元测试验证。

1
2
3
4
5
6
7
8
9
10
class 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

用例加载

同时对add和Sub方法进行单元测试验证

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
from  calculator import *
import unittest

class Test_add(unittest.TestCase):
def setUp(self):
print("Test is start")

def test_add(self):
j=Math(5,5)
self.assertEqual(j.add(),10)

def test_add1(self):
j=Math(10,20)
self.assertEqual(j.add(),30)

def tearDown(self):
print("test is end!")

class Test_sub(unittest.TestCase):
def setUp(self):
print("Test is start")

def test_sub(self):
i=Math(8,8)
self.assertEqual(i.sub(),0)

def test_sub1(self):
i=Math(5,3)
self.assertEqual(i.sub(),2)

def tearDown(self):
print("test is end!")

if __name__ == '__main__':
suite=unittest.TestSuite()
suite.addTest(Test_add("test_add"))
suite.addTest(Test_add("test_add1"))
suite.addTest(Test_sub("test_sub"))
suite.addTest(Test_sub("test_sub1"))

runner=unittest.TextTestRunner()
runner.run(suite)

用例合并管理

前面课程内容中,每个测试类都有SetUp()和tearDown()方法,而且两个方法内容都是一样的,用于打印开始与结束提示语句,是否可以合并在一起呢?

实践案例:

通过继承的方式来避免每次都写SetUp()和tearDown()方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from calculator import *
import unittest

class Test_StarEnd(unittest.TestCase):
def setUp(self):
print("test start")

def tearDown(self):
print("test end")

class Testadd(Test_StarEnd):
def test_add(self):
j=Math(5,5)
self.assertEqual(j.add(),10)


class TestSub(Test_StarEnd):
def test_sub(self):
i=Math(3,2)
self.assertEqual(i.sub(),1)

if __name__ == '__main__':
unittest.main()

跳过测试和预期失败

  • unittest.skip() 直接跳过测试
  • unittest.skipIf() 条件为真,跳过测试
  • unittest.skipUnless 条件为假,跳过测试
  • unittest.expectedFailure 预期设置失败

skip规则设定案例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import unittest

class Test1(unittest.TestCase):
def setUp(self):
print("Test1 start")

def test_c(self):
print("test_c")

def test_b(self):
print("test_b")

def tearDown(self):
print("est1 end")

class Test2(unittest.TestCase):
def setUp(self):
print("Test2 start")

def test_d(self):
print("test_d")

def test_a(self):
print("test_a")

def tearDown(self):
print("Test2 end!")


if __name__ == '__main__':
unittest.main()