Как заглушки метода, когда экземпляр конкретного объекта конкретных полей прошло?
Я хочу вернуть 4, когда экземпляр класса Person по [name = "Mohammad", age = 26] где вызван. Я хочу вернуть 5, когда экземпляр класса Person по [name = "Ali", age = 20] где вызван.
Итак, у меня есть эти классы:
public class Person {
private String name;
private int age;
Мой класс DAO:
public class DAO {
public int getA(Person person) {
return 1;
}
public int getB(Person person) {
return 2;
}
}
Вот класс калькулятор
public class Calculator {
private DAO dao;
public int add() {
dao = new DAO();
return dao.getA(new Person("Mohammad", 26)) +
dao.getB(new Person("Ali", 20));
}
}
и это мой тест:
@Test
public void testAdd() throws Exception {
when(mydao.getA(new Person("Mohammad", 26))).thenReturn(4);
when(mydao.getB(new Person("Ali", 20))).thenReturn(5);
whenNew(DAO.class).withNoArguments().thenReturn(mydao);
assertEquals(9, cal.add());
}
Так почему мой тест не пройден?
2 ответа
new Person("Mohammad", 26)
в Calculator
класс и new Person("Mohammad", 26)
в вашем тестовом классе не равно, так как вы не перезаписать equals
метод в Person
учебный класс.
Перезаписать метод равно в Person
класс, как показано ниже
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
if (age != person.age) return false;
if (name != null ? !name.equals(person.name) : person.name != null) return false;
return true;
}
Перезапись hashCode
это бесполезно при перезаписи equals()
методы
Я не совсем уверен, какую платформу тестирования вы используете, но экземпляры Person, используемые в вызовах when(), не совпадают с экземплярами, используемыми в вашем классе Calculator, поэтому, если вы не переопределяете equals() и hashcode () в Человек, которого они не будут рассматривать как совпадающий.
Ваша IDE должна иметь возможность генерировать подходящие методы equals() и hashcode () по умолчанию.