下面是unittest提供的几种断言方法来对测试结果进行判断
目录
下面是unittest提供的几种断言方法来对测试结果进行判断
assertIsNone 和 assertIsNotNone
assertIsInstance 和 assertNotIsInstance
方法 | 检查 | 版本 |
assertEqual(a, b) | a ==b | |
assertNotEqual(a, b) | a !=b | |
assertTrue(x) | bool(x) is True | |
assertFalse(x) | Bool(x) is False | |
assertIs(a, b) | a is b | 3.1 |
assertIsNot(a, b) | a is not b | 3.1 |
assertIsNone(x) | x is None | 3.1 |
assertIsNotNone(x) | x is not None | 3.1 |
assertIn(a, b) | a in b | 3.1 |
assertNotIn(a, b) | a not in b | 3.1 |
assertIsInstance(a, b) | isinstance(a,b) | 3.1 |
assertNotIsInstance(a, b) | not isinstance(a,b) | 3.1 |
常用的几种方法
assertEqual 和 assertNotEqual
a = 'hello'
b = 'hello'
c = 'world'
# 判断内容与数据类型是否一致
self.assertEqual(a, b)
# 判断内容与数据是否不一致 assertNotEqual()
self.assertNotEqual(a, c)
注意事项:assertEqual 、assertNotEqual方法判断的是同类型的值
a = '1'
b = 1
# 判断内容与数据类型是否一致
self.assertEqual(a, b)
# 输出结果为:
1 != 1
Expected :1
Actual :1
assertTrue 和 assertFalse
'''
assertTrue(a) = 判断是否为True
a == true -->通过
a != true -->不通过
'''
self.assertTrue(1 == 1)
self.assertTrue(1 != 1)
'''
assertFalse(a) = 判断是否为false
a == false -->通过
a != false -->不通过
'''
self.assertFalse(1 != 1)
self.assertFalse(1 == 1)
assertIn 和 assertNotIn
'''
test_assertIn(,) = 判断一个值(admin)中是否含有 其中一个值(a)
assertNotIn(,) = 判断一个值(hello)中是否 不 含有其中一个值(h)
'''
self.assertIn("a", "admin")
self.assertNotIn('h', 'hello')
assertIsNone 和 assertIsNotNone
def Is_None():
return None
def Is_NoNone():
return 123
# 判断是否为空
c = Is_None()
self.assertIsNone(c)
# 判断是否不为空
x = Is_NoNone()
self.assertIsNotNone(x)
assertIsNot
# 判断两个值是否相同
a = '1' # str类型
b = 1 # int类型
self.assertIsNot(a, b)
注意事项:与assertEqual 、assertNotEqual不同的是这个方法可以判断的不是同类型的值
assertIsInstance 和 assertNotIsInstance
'''
assertIsInstance(a,b) = 判断a的数据类型是否为b
assertNotIsInstance(a,b) = 判断a的数据类型是否不为b
'''
a = 'hello'
self.assertIsInstance(a, str)
self.assertNotIsInstance(a, int)
其他方法
assertAlmostEqual(a, b) round(a-b, 7) == 0
assertNotAlmostEqual(a, b) round(a-b, 7) != 0
# 版本:2.7
assertGreater(a, b) a > b
assertGreaterEqual(a, b) a >= b
assertLess(a, b) a < b
assertLessEqual(a, b) a <= b
assertRegexpMatches(s, re) regex.search(s)
assertNotRegexpMatches(s, re) not regex.search(s)
assertItemsEqual(a, b) sorted(a) == sorted(b) and works with unhashable objs
assertDictContainsSubset(a, b) all the key/value pairs in a exist in b
assertMultiLineEqual(a, b) strings
assertSequenceEqual(a, b) sequences
assertListEqual(a, b) lists
assertTupleEqual(a, b) tuples
assertSetEqual(a, b) sets or frozensets
assertDictEqual(a, b) dicts
assertMultiLineEqual(a, b) strings
assertSequenceEqual(a, b) sequences
assertListEqual(a, b) lists
assertTupleEqual(a, b) tuples
assertSetEqual(a, b) sets or frozensets 2.7assertDictEqual(a, b) dicts
使用时机
那么我们什么时候应该使用断言呢?如果没有特别的目的,断言应该用于如下情况:
- 防御性的编程
- 运行时对程序逻辑的检测
- 合约性检查(比如前置条件,后置条件)
- 程序中的常量
- 检查文档
- 例:防御性编程中添加断言
在代码开始添加注释是个好的开端,但是人们都不太喜欢读和更新这些注释,这些注释会很快变得过时。但对于断言,我们可以同时对这块代码编写文档,如果这些断言被违反了,会直接引起一个简单而又直接的失败。