gpt4 book ai didi

java - 尽管预期和实际相似,但 junit 中的 ArrayList 相等不起作用

转载 作者:行者123 更新时间:2023-12-01 19:26:57 26 4
gpt4 key购买 nike

我正在使用下面的测试方法来检查 Arraylist 是否按预期排序。

  @Test
void compareFields()
{
Assignment14 assignment14 = new Assignment14();

ArrayList<Person> PeopleList = new ArrayList<Person>();
PeopleList.add(new Person("Alex",56));
PeopleList.add(new Person("Thomas",23));
PeopleList.add(new Person("John",10));

ArrayList<Person> actualSortedResult = assignment14.compareFields(PeopleList);

ArrayList<Person> expectedSortedResult = new ArrayList<Person>();
expectedSortedResult.add(new Person("Alex",56));
expectedSortedResult.add(new Person("John",10));
expectedSortedResult.add(new Person("Thomas",23));

Assert.assertEquals(expectedSortedResult, actualSortedResult);
}

但是,尽管预期和实际情况相似,但同事们还是出现了错误。

java.lang.AssertionError: expected: java.util.ArrayList<[Person{name='Alex', age=56}, Person{name='John', age=10}, Person{name='Thomas', age=23}]> but was: java.util.ArrayList<[Person{name='Alex', age=56}, Person{name='John', age=10}, Person{name='Thomas', age=23}]>
Expected :java.util.ArrayList<[Person{name='Alex', age=56}, Person{name='John', age=10}, Person{name='Thomas', age=23}]>
Actual :java.util.ArrayList<[Person{name='Alex', age=56}, Person{name='John', age=10}, Person{name='Thomas', age=23}]>
<Click to see difference>

我尝试了以下断言类型,但没有任何效果。

   assertTrue("check equality", Arrays.equals(expectedSortedResult.toArray(), actualSortedResult.toArray()));
Assert.assertEquals(expectedSortedResult, actualSortedResult);
assertEquals(expectedSortedResult, actualSortedResult);
assertTrue(expectedSortedResult.equals(actualSortedResult));
assertArrayEquals(expectedSortedResult, actualSortedResult);

我可以知道我的方法有什么问题或者应该做什么吗?

最佳答案

ArrayList 等于合约说的是:当且仅当指定对象也是一个列表,两个列表具有相同的大小,并且两个列表中所有对应的元素对都相等时,才返回 true。

因此,查看您的错误,您必须检查 Person 类型的 equals 契约。如果您不覆盖此类型的等于,则引用将进行比较,因此您的列表不是等于

因此,您必须根据姓名和年龄字段重写 equals 方法来解决您的问题。

关于java - 尽管预期和实际相似,但 junit 中的 ArrayList 相等不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61246465/

26 4 0