[英]Multiple assertions when unit testing constructor?
我正在嘗試用2個構造函數對一個類進行單元測試。 每個構造函數都有多個參數來設置公共屬性。 我的問題是,我應該只有2個單元測試和多個斷言來檢查每個屬性是否已設置或每個構造函數的每個參數的測試?
Public Person(string name, string phone, string birthday)
{
name = name;
phone = phone;
birthday = birthday;
}
Public Person(string name) : this(name, null, null)
{}
我從未成為“每次測試只有一個斷言”的教條的粉絲。 這對我來說似乎並不實際 - 你最終會對你真正感興趣的內容產生很多不滿(測試聲明)。
是的,如果您遇到多個問題,那么您只會遇到一次測試失敗。 您修復測試,再次運行它,發現下一個故障,修復它並重復直到成功。 沒有很大的損失。
我不是說你應該在每次測試中測試大量的功能 - 但是走向另一個極端也不是務實。
我通常只會針對每個測試使用一個錯誤條件 - 所以如果你的構造函數實際上會拋出null參數的異常,我會在單獨的測試中檢查每個錯誤。 否則很容易意外遺漏。
您正在測試的操作是構造函數接受__參數,並將值設置為正確的值。
因此,我會說每個構造函數有1個測試,每個構造函數都有多個斷言,以確保正確設置所有成員。
你可能有興趣看看Kent Beck自己說的是什么,就在Stack Overflow上。 他說...
我得到的代碼是有效的,而不是測試,所以我的理念是盡可能少地測試以達到給定的置信水平(我懷疑這種信心水平與行業標准相比很高,但這可能只是傲慢) 。 如果我通常不會犯一個錯誤(比如在構造函數中設置錯誤的變量),我不會測試它。 我確實傾向於理解測試錯誤,所以當我有復雜條件的邏輯時我會格外小心。 在對團隊進行編碼時,我會修改策略以仔細測試我們共同出錯的代碼。
我沒有問題,承認這讓我重新思考一些我正在做的事情。 為了更好。
我建議不要對每個屬性進行一次測試,而是針對每個構造函數進行一次測試。
我想補充一點,根據yor類的使用位置,你可能還希望在name參數為空字符串時進行測試以驗證構造函數的行為(否定測試)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.