放心。如何检查是否返回空数组?

时间:2015-01-20 07:40:51

标签: java json rest rest-assured

我有以下代码可以测试我的RESTful API:

given().baseUri("http://...").get("/categories/all")
    .then()
    .body(
        "results",  not(empty())
    );

API返回以下响应:

{
    "error": {
        "type": "NotFoundException"
    }
}

我希望测试失败以获得此类响应。但测试通过了。

如何修改测试以使其失败?只有当API在"结果"中返回一个包含非空数组的对象时,它才会通过。键。当"结果"它应该失败。 key不存在,包含空数组或包含不是数组的内容。

4 个答案:

答案 0 :(得分:6)

我提出了以下解决方案:

given().baseUri("http://...").get("/categories/all")
    .then()
    .body(
        "results", hasSize(greaterThan(0))
    );

如果"结果"它会失败是一个空数组或不是数组。 它会通过"结果"是一个非空数组。 它以可读的方式报告错误,例如:

Expected: a collection with size a value greater than <0>
Actual: null

答案 1 :(得分:1)

我遇到了类似的问题,但在我的情况下,端点直接返回一个数组。我的解决方案:

@Test
public void testNotEmpty() {
    uAssured.given()
            .when()
                .get("resources/totest")
            .then()
                .statusCode(200)
                .body("$.size()", greaterThan(0));
}

对于上面的示例,以下内容也应该有效:

@Test
public void testNotEmpty() {
    uAssured.given()
            .when()
                .get("resources/totest")
            .then()
                .statusCode(200)
                .body("results.size()", greaterThan(0));
}

答案 2 :(得分:1)

要检查数组是否不为空,可以使用 not(emptyArray)方法。

   given()
  .baseUri("http://...")
  .get("/categories/all")
  .then()
  .body("data", not(emptyArray()));

使用org.hamcrest.Matcher中的emptyArray方法

答案 3 :(得分:0)

我遇到了同样的问题,发现以下指令有效:

RS

我尝试了上面的一切,但没有运气。