Java 不可理解的JUnit错误

Java 不可理解的JUnit错误,java,junit,Java,Junit,通过事先将两个映射转换为列表来测试它们的相等性(包括顺序)。可能有更好的方法,但我想知道为什么会出现这个错误。以下是测试: @Test public void sortedEntriesTest() { List<Map.Entry<String, AtomicInteger>> actualList = stream.sortedEntries(stream.getMap()); List<Map.Entry<String, AtomicIn

通过事先将两个映射转换为列表来测试它们的相等性(包括顺序)。可能有更好的方法,但我想知道为什么会出现这个错误。以下是测试:

@Test
public void sortedEntriesTest() {
    List<Map.Entry<String, AtomicInteger>> actualList = stream.sortedEntries(stream.getMap());
    List<Map.Entry<String, AtomicInteger>> expectedList = 
                                              expectedMap.entrySet()
                                                         .stream()
                                                         .sorted(Comparator.comparingInt(e -> -e.getValue().get()))
                                                         .collect(Collectors.toList());
    Assert.assertThat(expectedList, is(actualList));
}
@测试
公共空间分类系统{
List actualList=stream.sortedEntries(stream.getMap());
列表预期列表=
expectedMap.entrySet()
.stream()
.sorted(Comparator.comparingit(e->-e.getValue().get())
.collect(Collectors.toList());
assertThat(expectedList,is(actualList));
}
以下是错误:

java.lang.AssertionError: 
Expected: is <[file=1, for=1, project=1, is=1, an=1, just=1, example=1, this=2]>
 but: was <[file=1, for=1, project=1, is=1, an=1, just=1, example=1, this=2]>
Expected :is <[file=1, for=1, project=1, is=1, an=1, just=1, example=1, this=2]>

Actual   :<[file=1, for=1, project=1, is=1, an=1, just=1, example=1, this=2]>
java.lang.AssertionError:
预期:是吗
但是:是吗
预期:是吗
实际:
试试看

相反。

试试看

相反。

说明: 您正在比较两个不同对象的引用,它们(与对象一样)不同。这就是为什么您得到的是
AssertionError
——第一个引用是而不是第二个引用

解决方案: 使用
equals
方法(),它将通过调用

此外,请检查此问题和第一个(选定)答案-

编辑 既然您告诉我错误仍然存在,那么列表中的项目可能有问题。您应该检查如何创建
expectedList
actualList
中的
Map.Entry
实例。它们的实际类型可能不同,因为只是一个接口

此外,我建议您使用一种更简单的方法获取所需值进行比较。

说明: 您正在比较两个不同对象的引用,它们(与对象一样)不同。这就是为什么您得到的是
AssertionError
——第一个引用是而不是第二个引用

解决方案: 使用
equals
方法(),它将通过调用

此外,请检查此问题和第一个(选定)答案-

编辑 既然您告诉我错误仍然存在,那么列表中的项目可能有问题。您应该检查如何创建
expectedList
actualList
中的
Map.Entry
实例。它们的实际类型可能不同,因为只是一个接口


另外,我建议您使用一种更简单的方法获取所需的值进行比较。

调用
Assert.assertTrue(expectedList,actualList)不是更快更清晰吗
相反?@severityon如果你检查,你会发现你的解决方案是不可能的。对不起,我的意思是
assertEquals
@severityon我用
assertTrue
方法写了我的答案,因为这样调用
列表
equals
方法更清楚。此外,没有说明这两个对象是如何比较的,尽管我假设还调用了
equals
方法。根据我的经验,文本越多,清晰度就越低。关于
assertEquals
,没有什么不清楚的地方,而使用
assertTrue(x.equals(y))
你在传播逻辑。调用
Assert.assertTrue(expectedList,actualList)不是更快更清晰吗
相反?@severityon如果你检查,你会发现你的解决方案是不可能的。对不起,我的意思是
assertEquals
@severityon我用
assertTrue
方法写了我的答案,因为这样调用
列表
equals
方法更清楚。此外,没有说明这两个对象是如何比较的,尽管我假设还调用了
equals
方法。根据我的经验,文本越多,清晰度就越低。关于
assertEquals
,没有什么不清楚的地方,而使用
assertTrue(x.equals(y))
你在传播逻辑。仍然不会工作。错误是一样的,只是预期列表的顺序不同。那么你能把代码变成a吗?我们可以复制并粘贴到IDE中运行它。你可以尝试比较两个地图。其中一个我将其转换为条目列表,并使用sortedEntries静态方法按值(降序)对其进行排序。其他的我将变成一个列表,并按照代码中的方式进行排序。在这一点上,我很乐意以任何有效的方式对它们进行比较。制作一个MCVE,把它放在这里,然后我会把它放在我的IDE中。如果你想得到帮助,就要付出一些努力。事实上@Severity用这段代码做一个MCVE需要半个小时,所以我想我会完全放弃这种方法。谢谢你的帮助,反正还是不行。错误是一样的,只是期望列表的顺序不同。你能把代码改成a吗?我们可以复制并粘贴到IDE中运行它。你可以尝试比较两个地图。其中一个我将其转换为条目列表,并使用sortedEntries静态方法按值(降序)对其进行排序。其他的我将变成一个列表,并按照代码中的方式进行排序。在这一点上,我很乐意以任何有效的方式对它们进行比较。制作一个MCVE,把它放在这里,然后我会把它放在我的IDE中。如果你想得到帮助,就要付出一些努力。事实上@Severity用这段代码做一个MCVE需要半个小时,所以我想我会完全放弃这种方法。无论如何谢谢你的帮助
Assert.assertThat(expectedList, is(equalTo(actualList)));
Assert.assertTrue(expectedList.equals(actualList));