这是我第一次尝试编写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。我搜索了两种方法,但无法弄清楚如何。什么/如何最好地解决我的问题?
答案 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);