[英]Python unit test for a function that has try/except
我有一個函數,嘗試/除以下:
def func_A():
try:
# do some stuff
except Exception as e:
log.error("there was an exception %s", str(e))
我想為這個func_A()
寫一個單元測試更重要的是,我想確保這一點
我try/except
安全。 除非有錯誤,否則A中不應該拋出任何異常(雖然它會被try/except
捕獲),這就是我想用單元測試驗證的。
單元測試的最佳方法是捕獲異常拋出和捕獲的情況?
如果你真的需要這個,一種可能的方法是模擬log.error
對象。 在調用func_A
函數之后,您可以斷言您的mock 未被調用。
請注意,如果您不打算實際處理它們,則根本不應捕獲異常。 為了獲得適當的測試覆蓋率,您應該在此處提供2個測試 - 一個用於檢查try / except的每個分支。
另一種可能的解決方案是將實現拆分為兩個函數:
foo()
與邏輯沒有try語句。 這樣,您可以確保在您的實現中不會拋出任何異常。 safe_foo()
將foo()
包裝到try語句中。 然后你可以模擬foo()
來模擬它拋出異常,並確保捕獲每個異常。 缺點是foo()
將成為公共接口的一部分,或者您將為私有函數編寫測試。
您可以使用一個變量來跟蹤正常執行的函數或以異常結束。
def func_A():
function_state = True
try:
# do some stuff
except Exception as e:
log.error("there was an exception %s", str(e))
function_state = False
return function_state
使用assertTrue
驗證function_state
。
選擇1:不要。 這是測試實現細節。 嘗試編寫測試套件,以便功能完成您需要它完成的所有操作。 如果你想用你想要的輸入做你想要的,你就是好的。
選項2:您可以修改函數以將記錄器作為參數。 然后在測試用例中,傳入一個模擬對象並檢查是否調用了日志記錄方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.