assertArrayEquals
不适用于用户定义的类。
我有User
类,该类仅具有name
属性。当我为User
类创建一个数组对象(实际的和预期的)并尝试使用assertArrayEquals
进行测试时,测试失败。
我遇到错误
arrays first differed at element [0]; expected:<cts.Learning.User@3fa77460> but was:<cts.Learning.User@619a5dff>"
我正在使用Junit-4.12和Hamcrest-all 1.3版本。
public class User {
private String name;
public User(){}
public User(String name) {
this.name = name;
}
public String getName(){
return name;
}
public void setName(String name) {
this.name = name;
}
}
import org.junit.*;
import static org.junit.Assert.*;
public class UserJunit {
@Test
public void testUserBO() {
User[] expected = new User[2];
expected[0] = new User("A");
expected[1] = new User("B");
User[] actual = new User[2];
actual[0] = new User("A");
actual[1] = new User("B");
assertArrayEquals(actual, expected);
}
}
答案 0 :(得分:1)
assertArrayEquals
方法-处理了迭代和其他各种功能之后,最终解决了该调用:
expected.equals(actual)
因此,它会在您的equals
类上调用User
,并且由于您尚未声明equals
方法,因此它将{{{ 1}}类,它使用相等运算符进行比较,即,它比较对象引用而不是它们的值。
因此,equals
调用最终调用:
Object
由于它们不是同一实例,所以断言失败。
如果要断言assertArrayEquals
的这些实例之间的相等性,则必须提供一些定义,以使actual[0] == expected[0]
的两个实例相等意味着什么,即定义一个{{1} } User
上的方法。
这是一个例子:
User
如果将以上内容添加到equals
类中,则测试将通过。