2014-02-16 32 views
7

我只想知道是否有最佳實踐或常用方法來測試對象中的等式實現。我的意思是已被覆蓋的測試方法。等於方法的Junit

public boolean equals(Object o) 

我確實使用了這樣的邏輯。 (假設號碼和姓名必須等於獲得真正的)

Dog d1 = new Dog(1,"Alvin"); 
Dog d2 = new Dog(2,"Alvin"); 

Assert.assertFalse(d1.equals(null)); 
Assert.assertFalse(d1.equals(d2)); 
d2.setId(1); 
d2.setName("Kelvin"); 
Assert.assertFalse(d1.equals(d2)); 
d2.setName("Alvin"); 
Assert.assertTrue(d1.equals(d2)); 
Assert.assertTrue(d1.equals(d1)); 

但是,當有很多領域的這個任務是非常大的,枯燥的,所以我的問題是,如果有任何框架,工具,選項,任何使這一點變得更容易,並可以證明該方法已被正確覆蓋的東西。謝謝。

我知道,重寫方法equals取決於你需要的邏輯,而且測試用例的創建是,所以尋找一種標準的方法來測試避免測試用例中的大代碼的方法,如果存在明顯或任何建議你可能有。

+2

[自動檢查equals,hashCode和compareTo的一致性的技術的可能的重複](http://stackoverflow.com/questions/9624043/technique-to-automatically-check-consistency-of-equals-hashcode-和-to比較) – Joe

+0

在我發現我的答案那裏我的問題只是關於平等,但指向我,讓我找到我發佈的答案。 – Koitoer

回答

2

展望重複的問題,我看@ user598656答案,並建議使用MeanBeans(自動的java bean測試儀)

閱讀中,我發現這個功能的文檔的鏈接。

5.2.7。物業!意義!測試!算法! 屬性顯着性檢驗算法如下:

for each property in public getter/setter method pairs do 
create instance of class under test, object x 
create instance of class under test, object y 
change property of y to contain a different value 
if property is insignificant then 
assert x.equals(y) 
else 
assert x.equals(y) is false 
end if 
end for 

這就是我一直在尋找,答案是最後一個,但在我看來,這適合我的需要。

2

您可以使用基於字段的模板Fast code ecllipse plugin。您可以編寫一個簡單的模板並從類中選擇許多您希望使用這些字段生成語句的字段。