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

时间:2019-03-03 20:31:03

标签: java junit

我有返回对象的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)]>
...

现在,期望值和实际值均相同,但仍然存在断言错误。我在这里做错了。

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。您应该在类中添加list,equals和hashcode。之后,它将起作用。

答案 1 :(得分:0)

奇怪的是,Arrays.asList并没有覆盖equals,因此,即使它包含与另一个类型为ArrayList的列表相同的元素,也不会将它们相等。 / p>

一种解决方案是将其包装到ArrayList中:

assertEquals(new ArrayList<>(Arrays.asList(...)), myArrayList);