斷言就是assert,assert 后面是一個條件句,如果為True,什么事都不會發(fā)生,如果是False,會拋出一個assertion error,下面我舉個例子:
創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設、高性價比富蘊網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式富蘊網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設找我們,業(yè)務覆蓋富蘊地區(qū)。費用合理售后完善,10余年實體公司更值得信賴。
assert?1==1
#什么都沒發(fā)生
assert?1==2
Traceback?(most?recent?call?last):
File?"pyshell#10",?line?1,?in?module
assert?1==2
AssertionError
那什么時候應該使用assert?沒有特定的規(guī)則,斷言應該用于:
防御型的編程
運行時檢查程序邏輯
檢查約定
程序常量
檢查文檔
(在測試代碼的時候使用斷言也是可接受的,是一種很方便的單元測試方法,你接受這些測試在用-O標志運行時不會做任何事。我有時在代碼里使用assert False來標記沒有寫完的代碼分支,我希望這些代碼運行失敗。盡管拋出NotImplementedError可能會更好。)
關于斷言的意見有很多,因為它能確保代碼的正確性。如果你確定代碼是正確的,那么就沒有用斷言的必要了,因為他們從來不會運行失敗,你可以直接移除這些斷言。如果你確定檢查會失敗,那么如果你不用斷言,代碼就會通過編譯并忽略你的檢查。
在以上兩種情況下會很有意思,當你比較肯定代碼但是不是絕對肯定時。可能你會錯過一些非常古怪的情況。在這個情況下,額外的運行時檢查能幫你確保任何錯誤都會盡早地被捕捉到。
另一個好的使用斷言的方式是檢查程序的不變量。一個不變量是一些你需要依賴它為真的情況,除非一個bug導致它為假。如果有bug,最好能夠盡早發(fā)現(xiàn),所以我們?yōu)樗M行一個測試,但是又不想減慢代碼運行速度。所以就用斷言,因為它能在開發(fā)時打開,在產品階段關閉。
根據(jù)老外的解釋就是說assertEqual與assertEquals沒有區(qū)別,可以說是完全一樣的函數(shù),而現(xiàn)在assertEquals函數(shù)已經(jīng)被棄用,也就說不建議你使用了,以后可能這個方法就在python中消失了,在python3.0中已經(jīng)趨向使用不帶s的assert方法了,但是現(xiàn)在仍然沒有刪掉的原因是因為有一些舊代碼和項目在使用帶s的方法,語言要保持舊代碼的兼容性。
至于assert那就很好解釋了,就是判斷0,1 也就是python中的真假關系
assertAlmostEquals這2個方法存在的原因與上面的相同,建議你不要使用帶s的方法了,這個方法是做一個粗略判斷,判斷的值為你4舍5入后的值,也就是說5.1與5.2是相等的,如果使用這樣的assert方法。
斷言就是判斷是否跟預期結果一致,不一致的話,測試用例直接失敗,程序便不再執(zhí)行下去。
舉個簡單的例子。比如點擊某個按鈕會跳轉到某個頁面上,我們會設置斷言為是否能成功跳轉到這個頁面上,驗證的話,一般為這個頁面的信息。如果都不跳轉成功,那么頁面信息就什么沒有,那么驗證也無從入手。
斷言使用的主要是assertEqual的方法
如驗證百度搜索的標題是否為“123_百度搜索”
self.assertEqual(u"123_百度搜索",driver.title)
如要驗證是否為false
self.assertFalse(driver.title)
如要驗證是否為true
self.assertTrue(driver.title)
而驗證為了保證失敗也能正常運行下去,一般情況下都是在驗證的基礎上加異常捕獲
如驗證百度搜索的標題是否為“123_百度搜索”
try:
self.assertEqual(u"1234_百度搜索", driver.title)
except AssertionError as e:
print u"找不到這個標題"
assertIsNotNone(testValue, message)
定義: 單元測試庫函數(shù),用于單元測試中以檢查輸入值是否為None。
輸入值:
testValue:變量,需要測試的變量。
message:字符串,測試消息失敗時顯示的消息。
返回值: 根據(jù)斷言條件返回布爾值,如果輸入值滿足assertIsNotNone()將返回true,否則返回false。
函數(shù)名:
1. 判斷是否相等
assertEqual
assertNotEqual
2. 判斷真假
assertTrue
assertFalse
3. 判斷是否為空
assertIsNone
assertIsNotNone
返回值: 滿足斷言,返回True;不滿足斷言,返回False。
def 函數(shù)名():? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ?函數(shù)體? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ?return? 返回值? ? ? ? ? ? ? ? ? ? ? ? ? ??
def 函數(shù)名(非可選參數(shù),可選參數(shù)):
???函數(shù)體?
return 返回值
def 函數(shù)名(參數(shù),*b):
? ? 函數(shù)體
? ? return 返回值
函數(shù)名 = lambda 參數(shù) : 表達式
例1:f = lambda x , y? :? x + y? ? ? ? ? ? ? ? ? ? ? ??
調用:f(6 + 8)? ? ?輸出:14? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
例2:?f = lambda : "沒有參數(shù)的lambda函數(shù)!"
調用:?print(f())? ? 輸出: 沒有參數(shù)的lambda函數(shù)!