2010-07-20 130 views
4

有沒有一個框架或庫可用,當給定一個JavaBean時,它將「通過它的步伐」,即測試所有getter和setter,驗證屬性是否與getter和setter匹配等。?Java bean測試框架

+0

你可以通過反射 – hvgotcodes 2010-07-20 22:42:40

+1

如果有與您的getter和setter和莫名其妙的問題你的其他(實際)測試不暴露他們(即不合格)再有,其餘的問題,滾你自己你的測試套件 – 2010-07-21 00:21:43

+0

@mattb:有效點 – 2010-07-21 20:26:50

回答

8

就我個人而言,我認爲這不是測試中最困難的部分。通過反思可以做到這一點,但這並不能使測試成爲可能。

難的是找出所有可能的輸入,對於「幸福路徑」和錯誤的情況下,製作,確保異常拋出時,他們應該是等

你的Java Bean應實現equals和hashCode 。我更擔心測試來檢查等價合約:空等於,反身,對稱,傳遞,而不是等於。這些都不是微不足道的。

吸氣劑和固定器是你的問題中最少的。當人們談論70%或更高的代碼覆蓋率標準時,他們經常說可以忽略getter和setter。

+0

同意這不是最難的部分;只是很乏味。我曾爲一家撰寫了一個bean測試框架的組織工作,以便獲取代碼覆蓋率數字。 – 2010-07-21 20:25:31

+1

我認爲這是一個錯誤的措施。高覆蓋率並不意味着良好的測試。像CRAP4J這樣的東西可能是一個更好的指標。 – duffymo 2010-07-21 21:14:59

1

如果你不喜歡像http://commons.apache.org/validator/更喜歡的東西,我會建議你自己寫。就個人而言,我不喜歡純粹的數據保存對象沒有任何行爲 - 這不是很好的設計。所以如果我沒有被迫使用這些對象(通過與j2ee工作),我試圖擺脫它們。

2

看看反射測試工具:

http://code.google.com/p/rtu/

但如果你正在測試生成的方法(基於類的字段),可能不值得。

+0

這看起來很有希望。謝謝! – 2010-07-21 20:29:20

+0

投票答案是好的:) – Jon 2010-07-21 21:37:23

1

你可以試試http://oval.sourceforge.net/橢圓它允許你在你的bean上使用註釋,然後執行一個驗證方法。它不完全符合JSR303。如果你想使用完全兼容的東西,你應該檢查出Hibernate驗證器。

像上面的狀態絕對檢查出Apache的公共驗證。

0

我想這個庫是回答你的問題: http://outsidemybox.github.com/testUtils/

它測試bean的所有初始值的制定者,吸氣劑,hashCode()方法,equals()方法和toString()。 您只需定義默認和非默認屬性/值的映射。

它也可以用附加的非默認構造函數測試bean的對象。

4

雖然我同意有更大的問題需要解決,但有些情況下用於測試Java bean方法。處理大型代碼庫的大型團隊可能會遇到問題。我已經看到了一些複製/粘貼錯誤的情況,導致getter或setter在錯誤的屬性上工作。健忘可能會導致hashCode和equals方法變得不一致。在這個簡單的代碼中查找錯誤可能非常令人沮喪。

Bean Matchers是一個庫,可以在這方面提供幫助。它提供了一系列用於反射測試Java bean的Hamcrest匹配器。例如:

@Test 
public void testBean() { 
    assertThat(MyBean.class, allOf(
      hasValidBeanConstructor(), 
      hasValidGettersAndSetters(), 
      hasValidBeanHashCode(), 
      hasValidBeanEquals(), 
      hasValidBeanToString() 
    )); 
} 
+0

Bean Matchers圖書館轉移到Github。新的URL https://github.com/orien/bean-matchers – 2017-08-07 08:15:28