比较JUnit中的2个对象

时间:2018-01-16 10:28:03

标签: java json unit-testing junit gson

我正在努力学习 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}

有没有办法达到我想要的目的?

1 个答案:

答案 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