我正在努力学习 JUnit 并且我已经练习了一段时间我现在在比较2个对象时遇到了问题。这被认为是JSON对象。我为此目的使用 GSON
例如,我有一个JSON字符串,我已将其转换为一个对象,我有另一个JSON对象,它将完全相同,现在当我为这两个对象写assertEquals
时返回类似
java.lang.AssertionError:
Expected :Data@2ret9593
Actual :Data@7647qe21
由于它们是JSON对象,键值对的顺序可能不同但我希望它检查它们并返回结果(如果它们相等或不相同)并忽略一些其值不被考虑但字段很重要的字段时间戳或动态生成的id等。
这不仅仅是关于平等的方法我在这里尝试的是比较2个JSON字符串并忽略测试时动态分配的一些字段
例如:
{"name": "ray", "age": "20"} == {"age": "20", "name": "ray", "timestamp": 03:10:54}
有没有办法达到我想要的目的?
答案 0 :(得分:3)
不是将JSON反序列化为对象以便于比较,而是可以使用JSONAssert来促进测试用例中有意义的“JSON比较”。
例如:
String expected = "{"name": "ray", "age": "20"}";
String actual = "{"age": "20", "name": "ray"}"
JSONAssert.assertEquals(expected, actual, false);
在此示例中,strict已设置为false,这指示JSONAssert原谅重新排序。
仅使用JSONAssert download the JAR或 - 如果使用Maven - 将以下内容添加到项目的pom.xml中:
<dependency>
<groupId>org.skyscreamer</groupId>
<artifactId>jsonassert</artifactId>
<version>1.5.0</version>
<scope>test</scope>
</dependency>
并添加这样的断言:
JSONAssert.assertEquals(expectedJSONString, actualJSON, strictMode);
更多示例in the cookbook。