assert斷言語句用來聲明某個條件是真的,其作用是測試一個條件(condition)是否成立,如果不成立,則拋出異。
一般來說在做單元測試的時候用的比較多,在生產環境代碼運行的情況下,不建議使用斷言,會讓程序abort掉。
什麼時候使用斷言
保護性的編程 正常情況下,並不是防範當前代碼發生錯誤,而防範由於以後的代碼變更發生錯誤。
運行時序邏輯的檢查 這種情況一般都是很嚴重的,防止髒數據或者異常數據進入業務系統,主動進行中斷處理
單元測試代碼 開發或測試人員編寫單元測試代碼的時候,也會使用斷言
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
當然,我們也可以通過-O參數來忽略斷言,運行python3 -O test.py
輸出:
compare: 1 3
單元測試中常用斷言
Python中的unittest框架用來進行單元測試非常方便
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
小結
斷言在軟件系統中有非常重要的作用,寫的好可以讓你的系統更穩定,也可以讓你有更多面對對象的時間,而不是在調試代碼。
作者:田閱川
鏈接:https://www.jianshu.com/p/b70b3340e55f
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。