ArrayList 和 Arrays.asList() 的 Junit 断言错误

ppb*_*ppb 2 java junit

我有返回对象 ArrayList 的方法,如下所示 -

public <Range> getAllRanges(List<Range> ranges){
  //Some business logic
  ....
  List<Range> resultRanges = new ArrayList<>();
  .....
  return resultRanges;
}
Run Code Online (Sandbox Code Playgroud)

我为此编写 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);
}
Run Code Online (Sandbox Code Playgroud)

但我收到断言错误,例如 -

java.lang.AssertionError: expected: java.util.Arrays$ArrayList<[(1, 4)]> but was: java.util.ArrayList<[(1, 4)]>
....
Run Code Online (Sandbox Code Playgroud)

之后我在测试中尝试了下面的代码 -

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

但在那之后我得到了-

java.lang.AssertionError: expected: java.util.ArrayList<[(1, 4)]> but was: java.util.ArrayList<[(1, 4)]>
...
Run Code Online (Sandbox Code Playgroud)

现在预期和实际是相同的,但仍然断言错误。我在这里做错了什么。

Vic*_*yew 5

奇怪的是,Arrays.asList尚未覆盖equals,因此即使它包含与另一个 type 列表相同的元素ArrayList,它们也不会被视为相等。

一种解决方案是将其包装成ArrayList

assertEquals(new ArrayList<>(Arrays.asList(...)), myArrayList);
Run Code Online (Sandbox Code Playgroud)