TL;DR 版本:
我怎么知道我的方法是否因為我配置的錯誤場景而不是因為另一個錯誤而引發例外?另外,我是否應該始終配置所有內容以測驗是否拋出例外,或者僅配置用于拋出例外的點就足夠了?
長版:
我有一個類 MyClass,它有一個名為 foo 的方法。方法 foo 呼叫一個 API,該 API 回傳一個指示操作是否成功的物件。如果 API 回傳的物件指示錯誤,則 foo 方法應拋出未經檢查的例外。
為了測驗 foo 是否拋出例外,我正在模擬 API,以便它始終指示失敗。foo 方法按預期作業,拋出例外。
然而,確實有其他事情可以使 foo 拋出例外。例如,如果 API 成功但傻瓜的其他依賴失敗,傻瓜將并且應該拋出例外。
因此,為了測驗 foo 是否由于 API 中的失敗而引發例外,我需要模擬 foo 具有的所有其他依賴項。因此,當 API 失敗時,測驗 foo 是否拋出例外的單元測驗變得太大。對于涉及例外的所有其他測驗也是如此。
最糟糕的是,歸根結底,我總是在質疑,是因為 API 失敗而引發例外,還是因為發生了另一個錯誤?
我能想到的解決方案是為每種可能的失敗情況創建例外,例如“HiImFooAndTheApiThatICalledFailed_Exception”。我不確定這是否是一種合理的方法。其他解決方案是測驗例外的訊息,但我認為這很糟糕,因為我會將訊息限制為靜態的。
uj5u.com熱心網友回復:
您可以模擬其他依賴項并檢查是否沒有呼叫任何方法。因此,如果您遇到例外,您將確定它來自您的代碼。
如果您的代碼可以在幾個不同的場景中拋出例外,您可以分別測驗它們。
你不需要擔心你的哪一段代碼拋出了例外,只拋出了正確的例外。
只要您對所有場景進行了測驗,您就可以合理地確定您的代碼是好的。只需將其視為黑匣子。如果所有輸入都為您提供預期的輸出,那么它如何發生并不重要。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/515019.html
標籤:爪哇C#单元测试
上一篇:在非可選輸入引數上測驗None
