對於除了其他方法之外還有幾個setter和getter的類,在編寫訪問器的單元測試時節省時間是否合理?考慮到在測試接口的其餘部分時會調用它們?訪問器必須進行單元測試嗎?
回答
絕對如此。單元測試的想法是確保更改不會以未知的方式影響行爲。您可以通過不寫入getFoo()
的測試節省一些時間。如果您將Foo
的類型更改爲稍微複雜一點,那麼您可能很容易忘記測試訪問者。如果你在質疑你是否應該寫一個測試,你最好寫它。恕我直言,如果你想跳過爲方法添加測試,你可能想問自己,如果方法是必要的或不是。爲了充分披露,我是那些人之一,只有在證明有必要時才增加二傳手或吸氣劑。您會驚訝於在施工後您真的不需要訪問特定的成員,或者您只想訪問真正依賴於成員的計算結果。但我離題了。
一個好的口頭禪是總是添加測試。如果你認爲你不需要一個,因爲這個方法是微不足道的,請考慮刪除該方法。我意識到,通常的建議是,跳過「微不足道」方法的測試是可以的,但是您必須問問自己該方法是否必要。如果你跳過這個測試,你就是說這個方法總會讓總是變得微不足道。請記住,單元測試也可用作意向文件和合同提供的文件。因此,一個微不足道的方法測試表明該方法的確意味着微不足道。
我只會單元測試他們,如果他們做的不止是設置或返回一個變量。在某些時候,你需要相信編譯器會爲你生成正確的程序。
我喜歡爲它們進行單元測試。如果訪問者除了簡單地返回一個字段之外還有其他工作,那麼這些代碼將被正確地測試。
即使給定的存取器除了返回一個字段之外沒有其他任何操作,它可能稍後會被修改來做額外的事情。
此外,這是一個簡單的方法來增加正在運行的測試的數量,許多管理者都喜歡。
如果您的IDE生成並管理成員訪問器的修改---您不會做任何特殊的事情---那麼測試它們確實不重要;類型將匹配,命名將由模板等。
我的測試標準是每一段包含條件邏輯(while,if,for等)的代碼都要被測試。如果訪問器是簡單的getter/setter,我會說測試它們是在浪費你的時間。
我認爲節省時間是合理的,不要寫出你認爲不會特別有用的單元測試。
雖然100%的測試覆蓋率是一個令人欽佩的理想,但在某些時候,如果您花時間編寫測試並不值得您從中獲益,那麼您會遇到收益遞減的情況。
如果您發現某些情況下,您可以隨時返回並添加更多的單元測試,從而確定它們會有用。
我想大多數人會說測試它們是浪費你的時間。在99%的情況下是這樣。如果在訪問器中存在一個錯誤,而其餘的單元測試不會間接捕獲它,那麼我會開始質疑爲什麼該屬性存在。
在另一方面,檢測的訪問需要較少的打字說問這個問題:)
我個人對其進行測試。但對我而言,這是一個灰色地帶,只要他們有足夠的關於課堂功能的覆蓋範圍,我就不會迫使我的小組中的其他人進行測試。
通常當我考慮寫單元測試我問自己如下:
- 是對的getter/setter的DAL(數據訪問層)訪問什麼?
如果是這樣,那麼我會包括一個單元測試。以防萬一,因爲如果在將來的某個時候你決定實施延遲加載,或者比簡單的get/set更高級的東西,那麼你需要確保這個工作正常。
- getter/setter會拋出一個異常是否可能?
獲得者的最佳實踐是不允許他們拋出異常。二傳手是另一回事。但是,無論哪種方式,如果您決定某個屬性可能會拋出異常,那麼爲該屬性編寫單元測試,既可以成功訪問,也可以有目的地生成異常。
除此之外,我不會打擾,正如Dan指出的那樣:「在某些時候,您需要相信編譯器會爲您生成正確的程序。」
我們公司有兩種人和意見。我傾向於並非專門測試它們,因爲它們通常
- 在另一個測試的情況下測試(自動生成如還有其他一些代碼,利用這些訪問的
- 不包含任何代碼這可能會破壞
也有例外,但:
- 當他們不是簡單的摹enerated「干將」和「二傳手
- 當他們是,這只是提供給其他用戶,並在您目前正處於
這兩種情況下威力使得環境沒有真正測試的一個重要API的一部分我來測試他們。第一個比第二個多。
沒有冷靜的方式! 浪費時間!
即使鮑勃馬丁See SO podcast 41,敏捷的祖父說不。
您不必爲不包含邏輯的屬性編寫測試。
測試簡單屬性的唯一解釋是提高測試覆蓋率 - 但它很愚蠢。
- 1. 單元測試是否意味着測試必須被模擬?
- 2. 如何對必須成對出現的函數進行單元測試?
- 3. 我是否必須進行沒有特定功能的單元測試類?
- 4. 如何對數據庫訪問邏輯進行單元測試?
- 5. 使用數據訪問層進行單元測試
- 6. 運行VS單元測試時可以進行調試嗎?
- 7. 角2單元測試必須嵌套ngModel元素
- 8. 在C++中使用朋友類與添加訪問器進行單元測試?
- 9. 我必須爲SpringMVC3.2單元測試導入什麼?
- 10. 單元測試必須手動中斷的異步計算
- 11. 單元測試是否必須有一個聲明像「assertEquals(..)」
- 12. 單元測試必須位於相同的包中?
- 13. 腳本#單元測試與DOM訪問
- 14. 單元測試雲Bigtable數據訪問
- 15. Java單元測試無法訪問ResourceBundle
- 16. 訪問單元測試資源
- 17. 單元測試數據庫訪問層
- 18. 單元測試數據訪問層c#
- 19. 單元測試數據訪問層
- 20. 代碼訪問ActiveDirectory的單元測試
- 21. 在Dart單元測試中訪問DOM
- 22. 我應該訪問單元測試的受保護方法嗎?
- 23. 使用CSRF進行單元測試ZF2表單的問題
- 24. 我們是否必須使用Cognito進行Dynamodb訪問?
- 25. JPA實體必須經過單元測試並且如何執行?
- 26. 使用QT進行單元測試
- 27. 使用docker進行單元測試
- 28. 在Silverlight中進行單元測試
- 29. 如何對wxPython進行單元測試?
- 30. 使用Cocoapods進行Xcode單元測試
同意 - 測試僅在測試可能出錯時纔有用 – ChrisF 2009-02-27 16:42:16
但是如果它們稍後被修改以容納更多邏輯將會怎樣。單元測試的重點不在於抓住代碼的不良變化? – LegendLength 2009-03-25 00:38:52