我對單元測試有相當多的知識。我一直在嘗試閱讀代碼合同。它真的幫助單元測試嗎?特別是當我們談論代碼合同以幫助進行單元測試時,它是否被高估?我特指的是.net 4.0中的合同。我使用nunit進行單元測試。代碼合約確實有助於單元測試嗎?
回答
是和否。單元測試基本上是一個合約,它說MyMethod()需要X,並且預期Y會是結果,如果不這樣做,那麼單元測試會失敗,並且提醒您作爲MyMethod()的開發人員裏面有東西。代碼合同確實可以幫助您編寫單元測試,因爲合同中的要求使您在編寫單元測試時更容易瞭解單元測試的要求。但是,代碼合同的真正原因不適合您,而是您使用創建的API的其他開發人員。單元測試讓你知道正確的輸入和輸出,但是當你將代碼釋放到野外時,單元測試不會與.dll一起發佈。代碼合同給其他開發人員通過編譯時合同和檢查知道這些相同的需求。契約可以防止那些有可怕傾向的開發者(我)不會閱讀方法文檔並開始傳遞事物,所以現在他們會通過合同主動提出警告。
不,我不認爲代碼合同可以幫助你編寫單元測試。單元測試定義了給定動作的行爲和約束。在單元測試中寫入的規範之一可能是方法的參數不能爲空。
在這種情況下,您仍然需要編寫單元測試。代碼合同是實現規範的一種方式,但不是唯一的方法。
換句話說,不要認爲使用代碼合約意味着你不必編寫單元測試!如果有人更改代碼合同或將其刪除,則不會有測試告訴您該預期規格已失敗。
我不認爲有人說代碼合約應該取代單元測試。 – 2010-07-27 16:15:25
我同意合同不幫助編寫單元測試。理想情況下,測試應該是第一位的,所以在測試失敗之前不應該存在合同。然後可以編寫合同來執行任何負面(「應該拋出」)測試。 – 2012-10-05 21:58:27
代碼合同可以用於你不能使用單元測試(接口合同)的事情。它們被應用於繼承鏈(在手工單元測試中你可以很容易地犯錯誤)。他們自動提供文檔(單元測試不能做)。他們可以在生產中提供運行時檢查(單元測試不能做)。另一方面,合同只有在行使時纔會失敗,因此如果沒有單元測試,您不能保證代碼質量(即您的所有代碼都滿足各種合同)。這兩個概念是免費的。
- 1. 記錄單元測試符合代碼
- 2. 單元測試代碼合同
- 3. 單元測試ASP.NET代碼
- 4. 單元測試代碼。ContinueWith(
- 5. 單元測試現有的代碼庫
- 6. 修改源代碼以使單元測試有效嗎?
- 7. 單元測試沒有實時數據庫的activejdbc代碼
- 8. 單元測試失敗,測試代碼有效!
- 9. 單元測試中的單步測試和調試代碼
- 10. 如何單元測試C(在代碼塊的幫助下)?
- 11. 單元測試 - 不可測試代碼轉換爲可測試代碼
- 12. 幫助單元測試
- 13. 單元測試幫助
- 14. 單元測試訂單公約?
- 15. 瞭解單元測試約束和NUnit語法助手
- 16. C#單元測試代碼問題
- 17. Jacoco覆蓋的單元測試代碼
- 18. 單元測試代碼RCPP在包
- 19. 單元測試SQL代碼生成器
- 20. 單元測試舊版C#代碼
- 21. Gallio單元測試啓動代碼
- 22. 代碼依賴單元測試
- 23. 如何單元測試CodeIgniter代碼
- 24. 單元測試javascript代碼風格
- 25. 單元測試閃存的AS3代碼
- 26. 單元測試Webform HttpContext相關代碼?
- 27. 單元測試專用代碼
- 28. 單元測試數學代碼
- 29. 單元測試動態加載代碼
- 30. maven單元測試代碼覆蓋率
但是這不會重複我的邏輯嗎?我的意思是,對於合同和單元測試,我們將具有相同的邏輯(事前和事後條件)。 – 2010-07-27 16:24:19
從純粹的角度來看,它應該,因爲如果有人意外刪除了合同,單元測試仍然會驗證您不希望它做現在可能做的事情的邏輯,反之亦然。合同可以作爲編寫單元測試的指南,但仍不能替代它們。 – 2010-07-27 17:02:12
我很難同意合同重複單元測試。代碼合同聲明瞭需求,單元測試驗證它們是否成立。從某種意義上說,測試正在驗證您的聯繫人是否正確 - 合同是可交付代碼,因此應該進行測試。 – 2012-10-05 21:56:12