比較整個對象是否有很好的框架?bean比較的單元測試框架
我現在
assertEquals("[email protected]", obj.email);
assertEquals("5", obj.shop);
如果壞了電子郵件返回我從來沒有知道是否有合適的店鋪,我想獲得不正確的字段列表。
比較整個對象是否有很好的框架?bean比較的單元測試框架
我現在
assertEquals("[email protected]", obj.email);
assertEquals("5", obj.shop);
如果壞了電子郵件返回我從來沒有知道是否有合適的店鋪,我想獲得不正確的字段列表。
與1測試一樣,如果每個斷言都在自己的測試中,你會知道如果其中一個或兩個失敗的原因是1或2個失敗測試失敗。
@Test
public void TestEmail()
{
obj = GetTestObject();
assertEquals("[email protected]", obj.email);
}
@Test
public void TestShop()
{
obj = GetTestObject();
assertEquals("5", obj.shop);
}
顯然,你需要的對象設置進入的方法OT有它在測試設置方法進行,並把它一類變量。
如果你真的想測試,如果所有屬性都在一個單一的測試設置:
@Test
public void TestAllProperties()
{
obj = GetTestObject();
bool testResult=true;
string failureString;
if "[email protected]".equals(obj.email) == false
{
testResult=false;
failureString+="email was different";
}
if "5".equals(obj.shop) == false
{
testResult=false;
failureString+="shop was different";
}
assertTrue(testResult,failurestring);
}
,但我不知道這是什麼使你真的。
但是,如果你真的想比較整個對象的相等性,那麼重寫equals方法(不要忘記getHashCode),並在那裏做相等檢查。畢竟這是什麼...
如果你想要一個不正確的字段列表,你可以使等於方法填充內部列表,你可以查詢如果相等性檢查失敗,獲取失敗的字段列表最後一次平等被檢查。不過,真的不認爲這是一個好主意。
如果你想測試對象的平等,那麼你一定需要實現使用的assertEquals(equals()和測試),但除此之外,薩姆是正確的,每個測試
一個斷言,您還可以實現媲美接口。
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Comparable.html
我會去hamcrest的匹配。他們讓我寫這樣的代碼:
assertThat(obj, hasProperty("email", equalTo("[email protected]")));
我個人不喜歡hamcrest。對我來說,它看起來像沒用的文字。爲什麼不只是assertEquals(obj.getEmail(),「[email protected]」);它更短!對我來說,它看起來像編寫額外的代碼(加上靜態導入!)。 – IAdapter 2011-03-30 16:27:51
有很多原因,爲什麼hamcrest不是無用的文本=) 首先你的*意圖*更清潔,那麼當它失敗而不是通用的「AssertionError」時,你會得到一個有意義的錯誤,最重要的是它擴展! – atamur 2011-03-31 06:54:50
有意義的錯誤聽起來很酷且可擴展。我會研究它,thx :) – IAdapter 2011-03-31 11:16:17
重複:http://stackoverflow.com/questions/1411612/how-to-test-for-equality-of-complex-object-graphs – skaffman 2010-05-21 12:39:05
我的目標是簡單;) – IAdapter 2010-05-21 13:11:48