我有返回对象的ArrayList的方法,如下所示-
public <Range> getAllRanges(List<Range> ranges){
//Some business logic
....
List<Range> resultRanges = new ArrayList<>();
.....
return resultRanges;
}
我为此写的是Junit-
@Test
public void someInputTest() {
final List<Range> ranges = Arrays.asList(new Range(1, 3), new Range(2, 4));
final List<Range> actual = myCalss.getAllRanges(ranges);
final List<Range> expected = Arrays.asList(new Range(1, 4));
assertEquals(expected, actual);
}
但是我遇到了断言错误,例如-
java.lang.AssertionError: expected: java.util.Arrays$ArrayList<[(1, 4)]> but was: java.util.ArrayList<[(1, 4)]>
....
之后,我在测试中尝试了以下代码-
@Test
public void someInputTest() {
final List<Range> ranges = Arrays.asList(new Range(1, 3), new Range(2, 4));
final List<Range> actual = myCalss.getAllRanges(ranges);
final List<Range> expected = new ArrayList<>();
expected.add(new Range(1, 4));
assertEquals(expected, actual);
}
但是在那之后我得到了-
java.lang.AssertionError: expected: java.util.ArrayList<[(1, 4)]> but was: java.util.ArrayList<[(1, 4)]>
...
现在,期望值和实际值均相同,但仍然存在断言错误。我在这里做错了。
答案 0 :(得分:1)
我遇到了同样的问题。您应该在类中添加list,equals和hashcode。之后,它将起作用。
答案 1 :(得分:0)
奇怪的是,Arrays.asList
并没有覆盖equals
,因此,即使它包含与另一个类型为ArrayList
的列表相同的元素,也不会将它们相等。 / p>
一种解决方案是将其包装到ArrayList
中:
assertEquals(new ArrayList<>(Arrays.asList(...)), myArrayList);