assert断言的使用

在没完善一个程序之前,我们不知道程序在哪里会出错,与其让它在运行时崩溃,不如在出现错误条件时就崩溃,这时候就需要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)

 

 

 

你可能感兴趣的:(python)