assertEquals 比较对象 id 而不是对象的内容?

assertEquals compares objects id and not the content of the object?

我想测试我的 insert 方法。 insert 方法只是将对象添加到列表中。但是,我用assertEquals的时候,好像是在比较对象,而不是对象的内容。

有没有办法比较存储在 ArrayList 中的用户定义对象的元素?

@Test
public void testInsert() {
    // Method answer
    Interval newInterval = new Interval(1, 20);
    ArrayList<Interval> emptyInterval = new ArrayList<Interval>();
    ArrayList<Interval> returnedAnswer = Solution.insert(emptyInterval, newInterval);

    // Expected answer
    ArrayList<Interval> expected = new ArrayList<Interval>();
    //expected.add(newInterval); // This will pass
    expected.add(new Interval(1, 20)); // This will fail

    assertEquals(expected, returnedAnswer);
}

assertEquals 通过调用 equals 方法来测试对象的相等性。这意味着对象必须充分实现该方法。 Interval 好像没有。因此你必须实施 Interval.equals(Object).

您也可以使用 Hamcrest matchers if you don't want to override equals. But you need the reflectEquals matcher of NitorCreations matcher 库。

assertThat(returnedAnswer, contains(
  reflectsEquals(new Interval(1, 20))));

也许AssertJ提供了一个类似的断言,但是你得自己去找,因为我很少使用AssertJ。