python unittest之異常測試

exception.png

前言

在python unittest測試框架中端三,提供了一系列的方法用于驗證程序的異常蛹找。

下面和我一起看看在unittest中沈矿,如何使用異常驗證來進行斷言惦辛,完成對應(yīng)的測試工作

assertRaises(exception, callable, *args, **kwds)

參數(shù)說明:

assertRaises(
exception,  # 待驗證異常類型
callable,  # 待驗證方法
*args,  # 待驗證方法參數(shù)
**kwds # 待驗證方法參數(shù)(dict類型)
)

功能說明:

驗證異常測試痪欲,驗證異常(第一個參數(shù))是當調(diào)用待測試函數(shù)時悦穿,在傳入相應(yīng)的測試數(shù)據(jù)后,如果測試通過业踢,則表明待測試函數(shù)拋出了預期的異常栗柒,否則測試失敗。

下面我們通過一個示例來進行演示知举,如果驗證做除法時拋出除數(shù)不能為0的異常ZeroDivisionError瞬沦。

# _*_ coding:utf-8 _*_

__author__ = '苦葉子'

import unittest
import sys
reload(sys)
sys.setdefaultencoding("utf-8")

# 除法函數(shù)
def div(a, b):
    return a/b
    
# 測試用例
class demoRaiseTest(unittest.TestCase):
    def test_raise(self):
        self.assertRaises(ZeroDivisionError, div, 1, 0)
        
# 主函數(shù)
if __name__ == '__main__':
    unittest.main()

test_raise方法使用了assertRaises方法來斷言驗證div方法除數(shù)為零時拋出的異常。

運行python raise_demo.py結(jié)果如下

.
-------------------------------------
Ran 1 test in 0.000s

OK

你還可以嘗試調(diào)整下數(shù)據(jù)雇锡,如下:

def test_raise(self):
    
    self.assertRaises(ZeroDivisionError, div, 1,1)

執(zhí)行結(jié)果如下:

F
=====================================
FAIL: test_raise (__main__.demoRaiseTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "raise_demo.py", line 18, in test_raise
    self.assertRaises(ZeroDivisionError, div, 1,1)
AssertionError: ZeroDivisionError not raised

----------------------------------
Ran 1 test in 0.000s

assertRaisesRegexp(exception, regexp, callable, *args, **kwds)

這里就不對參數(shù)進行說明了逛钻,該方法使用正則表達式方式來匹配異常斷言,能更加靈活锰提,實用更多的場景曙痘。

通常regexp參數(shù)是一個正常表達式芳悲,或包含正則表達式的字符串(使用re.search()函數(shù))

下面跟我一下看下assertRaisesRegexp的實際應(yīng)用示例

# _*_ coding:utf-8 _*_

__author__ = '苦葉子'

import unittest
import re
import sys
reload(sys)
sys.setdefaultencoding("utf-8")

# 除法函數(shù)
def div(a, b):
    return a/b

# 測試用例
class demoRaiseTest(unittest.TestCase):
    def test_raise_regexp(self):
        self.assertRaisesRegexp(
        ZeroDivisionError, "integer division or modulo by zero", div, 2, 0)
        
# 主函數(shù)
if __name__ == '__main__':
    unittest.main()

運行python test_raise_regexp.py上述示例,結(jié)果如下:

.
-----------------------------------
Ran 1 test in 0.001s

OK

我們修改下除數(shù)边坤,把

self.assertRaisesRegexp(
        ZeroDivisionError, "integer division or modulo by zero", div, 2, 0)

改為:

self.assertRaisesRegexp(
        ZeroDivisionError, "integer division or modulo by zero", div, 2, 2)

則執(zhí)行失敗名扛,因為匹配失敗了。

F
===================================
FAIL: test_raise_regexp (__main__.demoRaiseTest)
------------------------------------
Traceback (most recent call last):
  File "test_raise_regexp.py", line 19, in test_raise_regexp
    ZeroDivisionError, "integer division or modulo by zero",
AssertionError: ZeroDivisionError not raised

------------------------------------
Ran 1 test in 0.001s

FAILED (failures=1)

總結(jié)

今天我們就如何對被測對象的拋出的異常進行斷言驗證茧痒,做了基本的說明和示例肮韧,大家可以基于上述示例進行修改理解。深入掌握異常斷言原理和方法文黎。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惹苗,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子耸峭,更是在濱河造成了極大的恐慌桩蓉,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件劳闹,死亡現(xiàn)場離奇詭異院究,居然都是意外死亡,警方通過查閱死者的電腦和手機本涕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門业汰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人菩颖,你說我怎么就攤上這事样漆。” “怎么了晦闰?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵放祟,是天一觀的道長。 經(jīng)常有香客問我呻右,道長跪妥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任声滥,我火速辦了婚禮眉撵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘落塑。我一直安慰自己纽疟,他們只是感情好,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布憾赁。 她就那樣靜靜地躺著仰挣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪缠沈。 梳的紋絲不亂的頭發(fā)上膘壶,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天错蝴,我揣著相機與錄音,去河邊找鬼颓芭。 笑死顷锰,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的亡问。 我是一名探鬼主播官紫,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼州藕!你這毒婦竟也來了束世?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤床玻,失蹤者是張志新(化名)和其女友劉穎毁涉,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锈死,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡贫堰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了待牵。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片其屏。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖缨该,靈堂內(nèi)的尸體忽然破棺而出偎行,到底是詐尸還是另有隱情,我是刑警寧澤贰拿,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布睦优,位于F島的核電站,受9級特大地震影響壮不,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜皱碘,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一询一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧癌椿,春花似錦健蕊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至都办,卻和暖如春嫡锌,著一層夾襖步出監(jiān)牢的瞬間虑稼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工势木, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蛛倦,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓啦桌,卻偏偏與公主長得像溯壶,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子甫男,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 高級語言通常都內(nèi)置了一套try...except...finally...的錯誤處理機制且改,Python也不例外。 ...
    時間之友閱讀 746評論 0 1
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理板驳,服務(wù)發(fā)現(xiàn)又跛,斷路器,智...
    卡卡羅2017閱讀 134,601評論 18 139
  • 前言 python unintest單元測試框架提供了一整套內(nèi)置的斷言方法笋庄。 如果斷言失敗效扫,則拋出一個Assert...
    苦葉子閱讀 10,911評論 2 14
  • 一、簡介 Python最強大的結(jié)構(gòu)之一就是它的異常處理能力直砂,所有的標準異常都使用類來實現(xiàn)菌仁,都是基類Exceptio...
    隨風化作雨閱讀 3,063評論 0 1
  • 醉酒 假象 你是我年少時的輕狂 希望 光芒 你是我年輕時的夢想 愛在深夜?jié)L燙 歲月吻過的眼 承擔不起過往 只是躊躇...
    煦吻靜閱讀 314評論 0 2