我正在为代码学校的项目进行单元测试,而.equals()给了我一些麻烦.在我的项目中,.save()正在保存到SQL数据库中.此代码通过了单元测试:
@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()可以比较一些对象而不是其他对象?在我的代码示例中,我看到的唯一区别是一个对象采用一个参数,另一个采用两个参数.
谢谢!