Java 如何断言JsonObject的两个实例

Java 如何断言JsonObject的两个实例,java,junit,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");

这是我第一次尝试编写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。我搜索了两种方法,但都不知道怎么做。对于我的案例,什么/如何解决最好?

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

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

assertEquals(expected, actual);
你可以使用图书馆

它允许以您希望的方式进行断言:

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);

该框架支持和,并支持Hamcrest matchers

请告诉我们
JsonObject
类(包括其包)的完整名称。com.google.gson.JsonObject谢谢您的回复。我正在使用Parameterized与数据提供程序一起运行测试。也就是说,预期值将根据数据提供者而变化。所以,我不能总是像
expected.addProperty(“b”,1)那样做您的数据提供者可以提供整个JsonObject。