Java 当传递特定对象特定字段的实例时,如何存根方法?
我想在调用Person类的[name=“Mohammad”,age=26]时返回4。 我想通过调用[name=“Ali”,age=20]返回Person类实例时的5 所以我有这些课程:Java 当传递特定对象特定字段的实例时,如何存根方法?,java,unit-testing,matcher,hamcrest,Java,Unit Testing,Matcher,Hamcrest,我想在调用Person类的[name=“Mohammad”,age=26]时返回4。 我想通过调用[name=“Ali”,age=20]返回Person类实例时的5 所以我有这些课程: public class Person { private String name; private int age; 我的刀类: public class DAO { public int getA(Person person) { return 1; }
public class Person {
private String name;
private int age;
我的刀类:
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());
}
那么为什么我的测试会失败呢?我不太确定您使用的是哪个测试框架,但是when()调用中使用的Person实例与计算器类中使用的实例不同,因此除非您亲自重写equals()和hashcode(),否则它们不会被视为匹配 您的IDE应该能够生成合适的默认equals()和hashcode()方法。
计算器中的new Person(“Mohammad”,26)
类和测试类中的new Person(“Mohammad”,26)是不相等的,因为您没有覆盖Person
类中的equals
方法
覆盖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;
}
当覆盖equals()
方法时,覆盖hashCode
是非常必要的