断言:
接着上篇,用例里需要用到断言,来验证实际结果是否符合预期结果,前面有讲过,unittest.TestCase 有封装好的断言方法,我们的测试类继承了 TestCase 这个父类,所以我们可以直接在测试用例里调用断言 assertEqual 方法,示例如下:
import unittest
from class_13.math import Math
class TestMath(unittest.TestCase):
"""Math的测试类"""
def test_add(self): # 测试加法
result = Math(15, 30).add()
expect = 45
self.assertEqual(result, expect)
print('加法用例执行完毕!')
def test_sub(self): # 测试减法
result = Math(15, 30).sub()
expect = 444
self.assertEqual(result, expect)
print('减法用例执行完毕!')
def test_multiply(self): # 测试乘法
result = Math(15, 30).multiply()
expect = 450
self.assertEqual(result, expect)
print('乘法用例执行完毕!')
def test_divide(self): # 测试除法
result = Math(15, 30).divide()
expect = 0.5
self.assertEqual(result, expect)
print('除法用例执行完毕!')
执行结果:
可以看到,执行了4条测试用例,通过了4条,执行所用时间0.003s。
注意测试用例的实行顺序,并不是按照用例的位置上下顺序来执行的,而是以测试用例的名字的首字母在ASCII编码的顺序来执行,如首字母相同,则用第二字字母排序。
下面我们在用个失败的用例来看看断言的作用:
import unittest
from class_13.math import Math
class TestMath(unittest.TestCase):
"""Math的测试类"""
def test_add(self): # 测试加法
result = Math(15, 30).add()
expect = 0
self.assertEqual(result, expect)
执行结果:
执行失败,报错信息是断言错误:45 != 0
这就是断言的作用,assertEqual(a, b) 用来判断 a 是否等于 b,不等于就报错,抛出异常。
当然,断言不止assertEqual()一种方法,还有其他的断言方法。
更多的断言方法:
方法 | 描述 |
---|---|
assertEqual(a,b) | 断言a和b是否 相等,相等 则测试用例通过 |
assertNotEqual(a,b) | 断言a和b是否 不等,不等 则测试用例通过 |
assertTrue(x) | 断言x是否为 True,是True 则测试用例通过 |
assertFalse(x) | 断言x是否为 False,是False 则测试用例通过 |
assertIs(a,b) | 断言a是否 是b,是 则测试用例通过 |
assertIsNot(a,b) | 断言a是否 不是b,不是 则测试用例通过 |
assertIsNone(x) | 断言x是否 为None,是None 则测试用例通过 |
assertIsNotNone(x) | 断言x是否 不是None,不是None 则测试用例通过 |
assertIn(a,b) | 断言a是否 在b中,在b中 则测试用例通过 |
assertNotIn(a,b) | 断言a是否 不在b中,不在b中 则测试用例通过 |
assertIsInstance(a,b) | 断言a是否 是b的一个实例,是 则测试用例通过 |
assertNotIsInstance(a,b) | 断言a是否 不是b的一个实例,不是 则测试用例通过 |
以上是我们常用的断言方法,当然还有更多的断言,如果需要的话,我们可以在unittest.TestCase类文件中查看!
END!!!