Unittest中的断言
1、 python unintest单元测试框架提供了一整套内置的断言方法。
(1)如果断言失败,则抛出一个AssertionError,并标识该测试为失败状态
(2)如果异常,则当做错误来处理 注意:以上两种方式的区别
(3)如果成功,则标识该测试为成功状态
一、基本断言
1、 基本的断言方法提供了测试结果是True还是False。所有的断言方法都有一个msg参数,如果指定msg参数的值,则将该信息作为失败的错误信息返回
序号 |
断言方法 |
断言描述 |
1 |
assertEqual(arg1, arg2, msg=None) |
验证arg1=arg2,不等则fail |
2 |
assertNotEqual(arg1, arg2, msg=None) |
验证arg1 != arg2, 相等则fail |
3 |
assertTrue(expr, msg=None) |
验证expr是true,如果为false,则fail |
4 |
assertFalse(expr,msg=None) |
验证expr是false,如果为true,则fail |
5 |
assertIs(arg1, arg2, msg=None) |
验证arg1、arg2是同一个对象,不是则fail |
6 |
assertIsNot(arg1, arg2, msg=None) |
验证arg1、arg2不是同一个对象,是则fail |
7 |
assertIsNone(expr, msg=None) |
验证expr是None,不是则fail |
8 |
assertIsNotNone(expr, msg=None) |
验证expr不是None,是则fail |
9 |
assertIn(arg1, arg2, msg=None) |
验证arg1是arg2的子串,不是则fail |
10 |
assertNotIn(arg1, arg2, msg=None) |
验证arg1不是arg2的子串,是则fail |
11 |
assertIsInstance(obj, cls, msg=None) |
验证obj是cls的实例,不是则fail |
12 |
assertNotIsInstance(obj, cls, msg=None) |
验证obj不是cls的实例,是则fail |
二、比较断言
1、 assertAlmostEqual (first, second, places = 7, msg = None, delta = None)
验证first约等于second。 palces: 指定精确到小数点后多少位,默认为7
2、 assertNotAlmostEqual (first, second, places, msg, delta)
验证first不约等于second。 palces: 指定精确到小数点后多少位,默认为7
注: 在上述的两个函数中,如果delta指定了值,则first和second之间的差值必须≤delta
3、 assertGreater (first, second, msg = None)
验证first > second,否则fail
4、 assertGreaterEqual (first, second, msg = None)
验证first ≥ second,否则fail
5、 assertLess (first, second, msg = None)
验证first < second,否则fail
6、 assertLessEqual (first, second, msg = None)
验证first ≤ second,否则fail
7、 assertRegexpMatches (text, regexp, msg = None)
验证正则表达式regexp搜索匹配的文本text。 regexp:通常使用re.search()
8、 assertNotRegexpMatches (text, regexp, msg = None)
验证正则表达式regexp搜索不匹配的文本text。 regexp:通常使用re.search()
三、复杂断言
1、 unittest框架提供的第三种断言类型,可以处理元组、列表、字典等更复杂的数据类型。
序号 |
断言方法 |
断言描述 |
1 |
assertListEqual (list1, list2, msg = None) |
验证列表list1、list2相等,不等则fail,同时报错信息返回具体的不同的地方 |
2 |
assertTupleEqual (tuple1, tuple2, msg = None) |
验证元组tuple1、tuple2相等,不等则fail,同时报错信息返回具体的不同的地方 |
3 |
assertSetEqual (set1, set2, msg = None) |
验证集合set1、set2相等,不等则fail,同时报错信息返回具体的不同的地方 |
4 |
assertDictEqual (expected, actual, msg = None) |
验证字典expected、actual相等,不等则fail,同时报错信息返回具体的不同的地方 |
#练习: import unittest import random class TestSequenceFunctions(unittest.TestCase): def setUp(self): # 初始化一个递增序列 self.seq = range(10) print "setup completed!" def test_run(self): # 从序列seq中随机选取一个元素 element = random.choice(self.seq) # 验证随机元素确实属于列表中 self.assertTrue(element in self.seq) def test_sth(self): assert 1==1 def tearDown(self): print "tearDown completed" class TestDictValueFormatFunctions(unittest.TestCase): def setUp(self): self.seq = range(10) def test_shuffle(self): # 随机打乱原seq的顺序 random.shuffle(self.seq) self.seq.sort() self.assertEqual(self.seq, range(10)) # 验证执行函数时抛出了TypeError异常 self.assertRaises(TypeError, random.shuffle, (1, 2, 3)) if __name__ == '__main__': unittest.main()
1 #练习2: 2 import unittest 3 from Calc import Calc 4 5 class MyTest(unittest.TestCase): 6 7 @classmethod 8 def setUpClass(self): 9 print u"单元测试前,创建Calc类的实例" 10 self.c = Calc() 11 12 # 具体的测试用例,一定要以test开头,执行顺序按照字母顺序开头 13 def test_0add(self): 14 print "run add()" 15 self.assertEqual(self.c.add(1, 2, 12), 15, 'test add fail') 16 17 def test_1sub(self): 18 print "run sub()" 19 self.assertEqual(self.c.sub(2, 1, 3), -2, 'test sub fail') 20 21 def test_2mul(self): 22 print "run mul()" 23 self.assertEqual(Calc.mul(2, 3, 5), 30, 'test mul fail') 24 25 def test_3div(self): 26 print "run div()" 27 self.assertEqual(Calc.div(8, 2, 4), 1, 'test div fail') 28 29 30 if __name__ == '__main__': 31 unittest.main()# 启动单元测试