在没完善一个程序之前,我们不知道程序在哪里会出错,与其让它在运行时崩溃,不如在出现错误条件时就崩溃,这时候就需要assert断言的帮助。
python assert断言是声明其布尔值必须为真的判定,如果发生异常就说明表达示为假。可以理解assert断言语句为raise-if-not,用来测试表示式,其返回值为假,就会触发异常。
assert 1==1
assert 2+2==2*2
assert len(['my boy',12])<10
assert range(4)==[0,1,2,3]
为assert断言语句添加异常参数
assert 表达式 [, 参数]
lists = [1,2,3,4,5] assert len(lists) >=5,'列表元素个数小于5' assert 2==1,'2不等于1'
py.test
py.test 是一个轻量级的测试框架,所以它压根就没写自己的断言系统,但是它对Python自带的断言做了强化处理,如果断言失败,那么框架本身会尽可能多地提供断言失败的原因。那么也就意味着,用py.test实现测试,你一行代码都不用改。
import pytest def test_case(): expected = "Hello" actual = "hello" print('hello') assert expected == actual if __name__ == '__main__': pytest.main()
unittest
Python自带的unittest单元测试框架就有了自己的断言方法self.assertXXX()
import unittest
class TestStringMethods(unittest.TestCase):
def test_upper(self):
self.assertEqual('foo'.upper(), 'FoO')
if __name__ == '__main__':
unittest.main()
运行结果:
F
======================================================================
FAIL: test_upper (__main__.TestStringMethods)
----------------------------------------------------------------------
Traceback (most recent call last):
File "E:/Python/代码/scrapy/test/test_30_assert.py", line 46, in test_upper
self.assertEqual('foo'.upper(), 'FoO')
AssertionError: 'FOO' != 'FoO'
- FOO
? ^
+ FoO
? ^
----------------------------------------------------------------------
Ran 1 test in 0.003s
FAILED (failures=1)