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。