我正在爲代碼學校的一個項目進行單元測試,.equals()
給我帶來一些麻煩。在我的項目中,.save()
正在保存到SQL數據庫中。此代碼傳遞單元測試:爲什麼在比較兩個對象時,.equals()會導致斷言錯誤...但只是有時會出現?
@Test
public void save_assignsNameToObject() {
Restaurant testRestaurant = new Restaurant("PokPok","503-444-4444");
testRestaurant.save();
Restaurant savedRestaurant = Restaurant.all.get(0);
assertEquals(savedRestaurant.getName(), "PokPok");
}
但是,如果我改變最終行到下文中,將導致斷言錯誤:
assertTrue(savedRestaurant.equals(testRestaurant));
我調試使用System.out.println()
來驗證這兩個值testRestaurant
做「.equal」savedRestaurant
中的對應值。下面的單元測試(關於另一對象,非常類似於類)通過使用.equals()
方法:
@Test
public void save_assignsIdToObject_true() {
Cuisine testCuisine = new Cuisine("Mexican");
testCuisine.save();
Cuisine savedCuisine = Cuisine.all().get(0);
assertTrue(savedCuisine.equals(testCuisine));
}
編輯:這裏是.equals()
我的源代碼:
@Override
public boolean equals(Object otherRestaurant) {
if (!(otherRestaurant instanceof Restaurant)) {
return false;
} else {
Restaurant newRestaurant = (Restaurant) otherRestaurant;
return this.getId() == new Restaurant.getId() &&
this.getName().equals(newRestaurant.getName()) &&
...
this.getPhone().equals(newRestaurant.getPhone());
}
}
爲什麼.equals()
比較一些對象而不是其他人?在我的代碼示例中,我看到的唯一區別是一個對象接受一個參數,另一個接受兩個參數。
謝謝!
我想你應該向我們展示你爲'Restaurant'類重寫的'equals'方法。 – wawek
你可以向我們展示'美食'類嗎? –
@HollaHexkey引用我更新的答案。 –