REST Assured:如何测试体内“Set”类型的对象?

时间:2018-02-17 12:25:06

标签: java rest rest-assured

我想使用REST Assured断言响应主体。但目前我无法这样做。我收到了下面提到的错误消息。

实施细节如下:

BannerDto resultBannerDto = given()
            .contentType("application/json")
            .body(bannerAddDto)
            .when()
            .post("/api/v1/admin/banners")
            .then()
            .statusCode(HttpStatus.OK.value())
            .contentType(ContentType.JSON)
            .body("name", equalTo("banner A"))
//this line make error:
            .body("regions", equalTo(regionsSet.toString()))
            .extract().as(BannerDto.class);

虽然错误是:

java.lang.AssertionError: 1 expectation failed.
JSON path regions does not match.
Expected: [1, 2]
Actual: [1, 2]

参数regionsSet是:

    private Set<Long> regionsSet = new HashSet<>();
    regionsSet.add(1l);
    regionsSet.add(2l);

服务响应如下:

{regions=[1, 2], endDate=2017-05-01T22:00:00, productIds=[], bannerId=15,...

1 个答案:

答案 0 :(得分:0)

在查看您的回复正文后,解决方案非常简单。你想做什么:

.body("regions", equalTo(regionsSet.toString()))

这里是从响应主体收集regions的数据,该数据当前是JsonArray并将其与您的案例失败的字符串进行比较。我在下面给出了一些代码,它将澄清您的问题。在这里我使用的是Gson Library:

public class Simple {

    public static void main(String[] arg) {
        Set<Long> regionsSet = new LinkedHashSet<>();
        regionsSet.add(1l);
        regionsSet.add(2l);
        Gson gson = new Gson();
        JsonArray jr = new JsonArray();
        jr.add(1);
        jr.add(2);
        System.out.println("Not Equal now : " + jr.equals(gson.toJson(regionsSet).toString()));
        System.out.println("Equal now :  " + jr.toString().equals(gson.toJson(regionsSet).toString()));
    }
}

示例输出:

Not Equal now : false
Equal now :  true

希望这能澄清您的问题并让您了解如何继续。