java assertEquals对于以不同方式创建的等效Jackson对象失败
所以我想知道为什么在我的单元测试(Junit 5)中,当两个对象的创建方式不同时,它们会失败
第一种方式:
static ObjectMapper mapper = new ObjectMapper();
JsonNode output = mapper.convertValue(jsonTransform, JsonNode.class);
第二种方式:
JsonNode expectedOutput = mapper.readTree(jsonString);
然后断言:
Assertions.assertEquals(expectedOutput, output);
失败:
is org.opentest4j.AssertionFailedError: expected: com.fasterxml.jackson.databind.node.ObjectNode@d6e7bab<jsonString> but was: com.fasterxml.jackson.databind.node.ObjectNode@5fa07e12<jsonString>
此外,如果我随后将断言编辑为:
Assertions.assertEquals(expectedOutput, mapper.readTree(output.toString()));
它会过去的。那么,是什么概念导致第一个断言失败呢
# 1 楼答案
assertEquals
将调用此方法来查找两个对象是否相等:我想看看
JsonNode
中的equals()
方法,看看正在检查什么# 2 楼答案
我也有同样的问题,到目前为止,我找到的唯一解决方案是利用:
我知道这不是最理想的,但确实有效。有趣的是,InteliJ说比较失败时“内容相同”,但如果我删除
toPrettyString()
,测试就会失败