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

sha*_*dip 1 java testing junit arraylist

我正在使用下面的测试方法来检查 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);
  }
Run Code Online (Sandbox Code Playgroud)

但是,尽管预期和实际情况相似,但作为研究员却出现了错误。

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>
Run Code Online (Sandbox Code Playgroud)

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

   assertTrue("check equality", Arrays.equals(expectedSortedResult.toArray(), actualSortedResult.toArray()));
   Assert.assertEquals(expectedSortedResult, actualSortedResult);
   assertEquals(expectedSortedResult, actualSortedResult);
   assertTrue(expectedSortedResult.equals(actualSortedResult));
   assertArrayEquals(expectedSortedResult, actualSortedResult);
Run Code Online (Sandbox Code Playgroud)

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

Cod*_*ale 5

ArrayList等于合同说: Returns true if and only if the specified object is also a list, both lists have the same size, and all corresponding pairs of elements in the two lists are equal.

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

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