前言
assert斷言語句用來聲明某個條件是真的吹由,其作用是測試一個條件(condition)是否成立,如果不成立,則拋出異。
一般來說在做單元測試的時候用的比較多号胚,在生產(chǎn)環(huán)境代碼運行的情況下,不建議使用斷言浸遗,會讓程序abort掉猫胁。
什么時候使用斷言
- 保護(hù)性的編程 正常情況下,并不是防范當(dāng)前代碼發(fā)生錯誤跛锌,而防范由于以后的代碼變更發(fā)生錯誤弃秆。
- 運行時序邏輯的檢查 這種情況一般都是很嚴(yán)重的,防止臟數(shù)據(jù)或者異常數(shù)據(jù)進(jìn)入業(yè)務(wù)系統(tǒng)髓帽,主動進(jìn)行中斷處理
- 單元測試代碼 開發(fā)或測試人員編寫單元測試代碼的時候菠赚,也會使用斷言
Python中斷言使用
編輯test.py文件
def compare(a, b):
assert a>b, 'error: b is bigger'
print('compare: %d %d' %(a, b))
compare(1, 3)
輸出:
Traceback (most recent call last):
File "test8.py", line 5, in <module>
compare(1, 3)
File "test8.py", line 2, in compare
assert a>b, 'error: b is bigger'
AssertionError: error: b is bigger
當(dāng)然,我們也可以通過-O參數(shù)來忽略斷言郑藏,運行python3 -O test.py
輸出:
compare: 1 3
單元測試中常用斷言
Python中的unittest框架用來進(jìn)行單元測試非常方便
import unittest
class WidgetTestCase(unittest.TestCase):
def test_upper(self):
self.assertEqual('foo'.upper(), 'FOO')
unittest.main()
unittest中一些常用斷言方法如下:
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.2
assertNotIsInstance(a, b) not isinstance(a, b) 3.2
小結(jié)
斷言在軟件系統(tǒng)中有非常重要的作用衡查,寫的好可以讓你的系統(tǒng)更穩(wěn)定,也可以讓你有更多面對對象的時間必盖,而不是在調(diào)試代碼拌牲。
原文地址