我有一個這樣的代碼:如何在python中模擬異常調用?
def extract(data):
if len(data) == 3:
a = 3
else:
component = data.split("-")
if len(component) == 3:
a,b,c = component
else:
raise globals.myException("data1", "Incorrect format", data)
return a,b,c
這是一個簡化的。我想模擬異常類globals.myException。我做的是:
def test_extract_data_throws_exception(self):
with patch('globals.myException') as mock:
mock.__init__("data1", "Incorrect format", "")
with self.assertRaises(myException):
self.assertEqual(extract(""), (""))
,我總是得到錯誤:「類型錯誤:例外必須是老式類或BaseException衍生,沒有MagicMock」
編輯:由於@Aaron Digulla建議,猴子補丁是正確的解決方案。我發佈解決方案來幫助他人。
def test_extract_data_throws_exception(self):
#monkey patching
class ReplaceClass(myException):
def __init__(self, module, message, detail = u''):
pass
globals.myException = ReplaceClass
with self.assertRaises(myException:
self.assertEqual(extract(""), (""))
爲什麼你想嘲笑異常?爲什麼不簡單地把它扔到測試中呢? –
MyException從Exception擴展,但增加了一些funcionality作爲Log服務和其他東西。我知道我可以包括我的例外作爲我的測試的一部分,但我想保持清潔我的單元測試。此外,這是一個好奇的問題:) – Killrazor