Cra*_*lus 2 java collections junit unit-testing list
我有一个具有原始字段的类,如下所示:
public class Person{
String name;
int age;
int id;
int height;
public Person(String name, int age, int id, int height){
this.name = name;
this.age = age;
this.id = id;
this.height = height;
}
//other methods
}
Run Code Online (Sandbox Code Playgroud)
我有各种各样的人,我想按年龄排序:
Person p87 = new Person("John", 87, 123, 185);
Person p22 = new Person("George", 22, 12, 180);
//etc ....for other persons. Then I create a list of them
List<Person> persons= Arrays.asList(p87, p22, p45, p31, p55, p62 );
Collections.sort(persons, new Comparator<Person>() {
@Override
public int compare(Person p1, person p2) {
return p1.age - p2.age;
}
});
Run Code Online (Sandbox Code Playgroud)
现在我想测试它是否已正确排序,因此我有一个JUnit测试用例,其中包含以下内容:
assertEquals(Arrays.asList(p22, p31, p45, p55, p62, p87 ), persons);
测试用例通过.所以它是排序的.
但我不明白这一点.该assertEquals会使用比较2所列出List.equals它调用equals 每个包含的对象上.
问题是我没有equals在课堂上覆盖Person.
结果是以下失败:
Person p22 = new Person("George", 22, 12, 180);
Person p22_2 = new Person("George", 22, 12, 180);
assertEquals(p22, p22_2);
Run Code Online (Sandbox Code Playgroud)
我不明白这一点.为什么在测试用例中2列表相同?
在第一个示例中,您不是在创建新对象 - 您正在比较对同一对象的引用.这是有效的,因为默认实现equals是比较引用相等性.
你正在做相当于这个:
Person p22 = new Person("George", 22, 12, 180);
Person p22_2 = p22;
assertEquals(p22, p22_2); // works, because both refer to the same object
Run Code Online (Sandbox Code Playgroud)