问题描述
我有返回对象的 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)]>
...
现在预期和实际是机器人相同但仍然断言错误。 我在这里做错了什么。
1楼
奇怪的是, Arrays.asList
没有覆盖equals
,因此即使它包含与另一个ArrayList
类型的列表相同的元素,它们也不会被比较为相等。
一种解决方案是将其包装到ArrayList
:
assertEquals(new ArrayList<>(Arrays.asList(...)), myArrayList);
2楼
我有同样的问题。你应该在你的 class 中添加,它在 list、equals 和 hashcode 中使用。 之后它将起作用。