2010-05-20 70 views
4

以下是該場景。我有VO(Value Objects)或DTO對象,它們只是數據的容器。當我將它們拆分並保存到一個數據庫中(由於很多原因)並沒有優雅地映射到VO時,我想測試每個字段是否在數據庫中成功創建併成功讀回重建VO。用於檢查代碼覆蓋率的單元測試的反思

有沒有一種方法可以測試我的測試覆蓋了VO中的每個領域?作爲解決方案的一部分,我有一個關於使用反射來遍歷VO的字段的想法,但也許你們之前已經解決了這個問題?

當我在VO中添加字段時,我想要此測試失敗,並且不記得在我的測​​試中爲其添加檢查。

開發環境: 使用JUnit時,Hibernate/Spring和Eclipse的

回答

5

保持簡單:寫每VO/DTO一個試驗:

  1. 填補VO/DTO測試數據
  2. 將它保存
  3. (可選:檢查一切都已經正確保存在數據庫級別,使用純JDBC)
  4. 負載它
  5. 檢查裝入的VO/DTO和原始之一匹配

生產性代碼將會發展並且測試也需要維護。儘可能使測試儘可能簡單,即使它們是重複性的,恕我直言也是最好的方法。 過度工程測試或測試框架本身,使測試的通用(例如,通過閱讀與反思領域和填充VO/DTO自動)導致幾個問題:

  1. 時間花在編寫測試更高
  2. 可能會在測試中引入錯誤
  3. 由於測試更復雜,測試的難度更大
  4. 測試難以進化,例如通用代碼可能不適用於與其他稍有不同的新類型的VO/DTO,並且稍後將會介紹(僅作爲示例)
  5. 作爲生產代碼如何工作的示例,不能輕鬆使用測試

測試代碼和生產代碼在性質上有很大不同。在高效代碼中,您嘗試避免重複並最大限度地重用。生產性代碼可能很複雜,因爲它已經過測試。另一方面,你應該嘗試儘可能簡單的測試,並且重複是可以的。如果重複的部分損壞,則測試將失敗。

當生產代碼發生變化時,這可能需要幾次測試才能得到平凡已更改。與測試的問題被看作無聊的一段代碼。但我認爲這是他們應該的方式。

如果我把你的問題弄錯了,就讓我知道。

+0

我喜歡你保持測試簡單和重複的方法。 – 2010-05-25 11:45:53

1

我會建議cobertura這項任務。 運行測試後,您將獲得完整的代碼覆蓋率報告,並且如果您使用螞蟻任務cobertura-check,則可以添加覆蓋檢查並停止與屬性haltonfailure屬性的螞蟻呼叫。

0

您可以使其成爲VO驗證的一部分。如果使用getter時未設置字段,則可能會引發異常。

+0

不完全是我的意思。我想確保VO中的所有字段都能夠從DB後端CRUD,因爲它不能保證,我必須爲每個字段明確地編寫代碼。基本上我想編寫一個測試用例,確保我自動調用所有在測試用例中的VO中的setter和getters,我只是不知道該怎麼做。 – gtrak 2010-05-20 18:31:19

相關問題