java 请确保JSON主体包含列表中的所有字符串

xmq68pz9  于 2023-01-29  发布在  Java
关注(0)|答案(2)|浏览(111)

所以基本上,我构造了一个包含JSON对象主体字段名的String的列表。
大概是这样的

List<String> fieldNames = new ArrayList<String>();

然后我使用Rest-assured来获取一个JSON格式的响应,如下所示:

{
"id": 11,
"name": "CoolGuy",
"age": "80",
}

所以我的列表包含"id","name"和"age"。我如何验证JSON字段与列表中的这些字符串匹配。而不依赖于它们的顺序。
我只知道如何验证它是否包含一个String,下面是我使用的整个JUnit测试方法:

@Test
public void verifyJSONMatch() {
    given().auth().basic("user", "pass").when()
    .get(getRequestURL).then().body(containsString("id"));      
}

有什么建议吗?

bgibtngc

bgibtngc1#

您可以提取响应

ResponseOptions response = given().spec(request)
                    .get("/url_path");

然后解析JSON

DocumentContext parsedJson = JsonPath.parse(response.getBody().asString());
            assertThatJson(parsedJson).field("['id']").isEqualTo("11");
vlf7wbxs

vlf7wbxs2#

最简单的方法可能是将响应提取为Java对象,然后Assert所提取的对象与上面JSON中的对象相同。

MyObject expectedObject = new MyObject(11, "CoolGuy", "80");
MyObject myObject = 
    given().auth().basic("user", "pass")
        .when().get(getRequestURL)
        .then().extract().response().as(MyObject.class);
assertEquals(expectedObject, myObject);

你可以根据自己的意愿来构造这个对象。我假设你的对象可能比上面所示的要复杂得多。然而,这是一种更容易Assert相等性的方法,而且它很容易重用。

相关问题