![](/img/trans.png)
[英]Exception statement not covered by self.assertRaises in python unit test cases
[英]Python self.assertRaises
我有一個如下的小代碼,請幫助我如何以正確的方式編寫此代碼。 我想檢查ID是否存在於value
,如果不存在則引發異常。
value = ({'av' : '123', 'user' : 'abc', 'version' : 'xyz'})
with self.assertRaises(IndexError, value[0]["ID"]):
print "not an error"
您的代碼存在問題,即value[0]["ID"]
只是一個任意參數,在Python中,在執行函數調用之前對參數進行求值。 因此,在您的情況下, assertRaises
沒有機會攔截錯誤,因為它沒有被調用。
我想,如果您希望堅持使用基於上下文管理器的方法,那么您正在尋找此代碼段,這在需要一次評估語句或多個表達式的情況下非常有用:
with self.assertRaises(IndexError):
value[0]["ID"]
或者,如果您需要解析單個表達式(語句在lambda中不起作用),則可以采用這種方式工作:
self.assertRaises(IndexError, lambda: value[0]["ID"])
有關此問題的更多信息,請看一下這個問題 ,因為它似乎解決了有關如何正確使用assertRaises
。
另外請注意,在您的情況下,盡管有括號,但value
僅是dict,而不是元組-為了使value
單元素元組,請使用foo = (bar, )
語法-需要用逗號分隔以區分優先級優先級括號,例如(2 + 2) * 3
。
同樣,在單元測試中,您通常不需要輸出任何與斷言狀態相關的信息-萬一它通過或失敗,則由單元測試框架完成,以形成適當的報告。 但是,如果您仍然願意打印它,則只需在斷言之后包括print()
,因為如果斷言失敗,測試將停止運行,並且控制權將不會到達您的print()
。
如果您不堅持使用assertRaises
方法,我寧願選擇assertIn
:
value = ({'av' : '123', 'user' : 'abc', 'version' : 'xyz'})
self.assertIn('ID', value)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.