如何断言JsonObject的两个实例

时间:2017-05-30 19:03:13

标签: java junit

这是我第一次尝试编写JUnit测试。在我的情况下,我需要使用我期望的JSON字符串从API验证JSON响应。我的部分代码如下所示:

@Test
public void test()
{
    String expected = "{\"b\":1}";
    HttpClient client = HttpClientBuilder.create().build();

    HttpPost request = new HttpPost("http://10.0.0.10/e/p");
    StringEntity params = new StringEntity("{\"a\":1}");

    request.addHeader("Content-Type", "application/json");
    request.setEntity(params);

    HttpResponse response = client.execute(request);
    HttpEntity entity = response.getEntity();

    response.getStatusLine().getStatusCode();

    JsonObject actual   = readResponse(entity);
}

现在,您可以看到我的预期值是一个字符串。但是,我作为JsonObject得到的实际值。要么我必须保持两个json字符串并将它们断言为json或我必须将我的实际值转换为JsonObject。我搜索了两种方法,但无法弄清楚如何。什么/如何最好地解决我的问题?

2 个答案:

答案 0 :(得分:2)

您可以构建预期的JsonObject并使用assertEquals进行比较。

JsonObject expected = new JsonObject();
expected.addProperty("b", 1);

assertEquals(expected, actual);

答案 1 :(得分:2)

您可以使用JsonUnit库。

它允许以您寻找的方式进行断言:

JsonObject actual  = readResponse(entity)
// objects are automatically serialized before comparison
assertJsonEquals("{\"b\":1}", actual);

但它也支持比较内部代表JSON元素的两个对象:

JsonObject actual = new JsonObject();
actual.addProperty("test", 1);
JsonObject expected = new JsonObject();
expected.addProperty("test", 1);
assertJsonEquals(expected, actual);

Framework支持JacksonGson以及对Hamcrest匹配器的支持。