我還沒有用它來編寫單元測試,我想在一個完整的小工具框架上做這件事(使它更安全)。這樣我肯定會學到更多的單元測試,而不是我迄今爲止學到的東西。當你有單元測試時,斷言是多餘的嗎?
但是,我真的習慣於在系統中添加斷言,無論我看到有確切的上下文(在最終版本中刪除)。主要作爲函數實現中的前提條件,每次我檢索必須正確的信息(如着名示例的C/C++指針有效性)。
現在我問:當你有單元測試時,斷言是多餘的嗎?因爲在測試一些代碼的行爲時它看起來很冗餘;但在同一時間它不是相同的執行上下文。
我應該這樣做嗎?
我還沒有用它來編寫單元測試,我想在一個完整的小工具框架上做這件事(使它更安全)。這樣我肯定會學到更多的單元測試,而不是我迄今爲止學到的東西。當你有單元測試時,斷言是多餘的嗎?
但是,我真的習慣於在系統中添加斷言,無論我看到有確切的上下文(在最終版本中刪除)。主要作爲函數實現中的前提條件,每次我檢索必須正確的信息(如着名示例的C/C++指針有效性)。
現在我問:當你有單元測試時,斷言是多餘的嗎?因爲在測試一些代碼的行爲時它看起來很冗餘;但在同一時間它不是相同的執行上下文。
我應該這樣做嗎?
檢查先決條件的斷言可以幫助檢測和定位集成錯誤。也就是說,單元測試證明方法在正確使用(調用)時運行正確,檢查前提條件的斷言可以檢測方法的不正確使用(調用)。使用斷言會導致錯誤的代碼快速失敗,從而有助於調試。
+1簡潔且精確 – 2010-12-23 19:37:20
斷言不僅驗證代碼,而且作爲文檔的一種形式,通知讀者關於各種結構的屬性,他們可以確信在執行時(例如node->next != NULL
)將滿足。這有助於在閱讀代碼時創建代碼的心理模型。
斷言還可用於防止運行期間發生災難。例如
assert(fuel);
launch_rocket();
試圖在沒有燃料時啓動可能是災難性的。你的單元測試可能已經發現了這種情況,但總是有可能你錯過了它,並且因爲條件未得到滿足而中止,所以方式比運行時的崩潰和燒傷要好。
所以,總之,我會讓他們在那裏。添加它們是一個好習慣,而且無法解除它。
我會說你需要兩個。單元測試測試你的方法內斷言是否正確;)
單元測試和斷言是完全不同的東西,但它們相輔相成。
斷言處理正確的輸入輸出方法。
單元測試處理以確保單元根據一些控制規則(例如,一個規範。一個單元可以是ax方法,一個類或一組協作類(有時這樣的測試通過名稱「集成測試」)
因此,方法平方根的斷言沿着輸入和輸出的線都是非負數。 另一方面,聯合測試可能會測試9的平方根爲3,某些負數的平方根產生異常。
不需要斷言,即使你有單元測試也是需要的。單元測試應該測試那個斷言的特定條件。 – SRM 2010-12-23 17:05:39
斷言旨在表示不變量。當內部不變量被破壞時,單元測試不能覆蓋行爲,這並不總是可行的,也不是必須的。 – 2010-12-23 19:49:35