当前位置: 首页 > 知识库问答 >
问题:

Springboot重新设置访问JSON数组元素和验证字段不工作的设置

娄森
2023-03-14

我正在学习重新启动的集成测试,并且有一个Springboot REST API应用程序,它已经使用JUnit 5进行单元测试。现在,我想添加重启集成测试,因此,我向我的REST API Springboot应用程序添加了重启依赖项,我想测试如下:

    <dependency>
        <groupId>io.rest-assured</groupId>
        <artifactId>rest-assured</artifactId>
        <scope>test</scope>
    </dependency>

假设我有一个包含JSON数组和JSON对象的响应,如下所示:

[
    {
        "id": 22,
        "type": "House",
        "size": 3000,
        "soldDate": "2021-03-10"
    },
    {
        "id": 27,
        "type": "Appartment",
        "size": "750",
        "soldDate": "2020-01-22"
    }
]

,我想使用restasured来测试这个JSON响应,但我遇到了一些问题。我正在尝试测试以下内容:

    @Test
    final void restAssuredTestGetAllCars() {

        get("myapp/cars")
            .then().statusCode(200)  //validate status code
            .and()
                .body("$", hasSize(2)) // GOOD: validate size of the json array (root)
                .body("$.[0].id", hasItem(22)) //FAIL: validate 1st JSON object id
                .body("$.[0].type", hasItem("House")) //FAIL: validate 1st JSON object type
                .body("$.[0].size", hasItem(3000)) //FAIL: validate 1st JSON object size
                .body("$.[0].soldDate", hasItem("2021-03-10")) //FAIL: validate 1st JSON object size
                ... also validate 2nd JSON object same way as above by accessing [1] index
                ... then validate using hasItems like below
                .body("id", hasItems(22, 27)) //FAIL: validate all ids are present in response
                .body("type", hasItems("House", "Appartment")) //FAIL: validate all types are present in response
                .body("size", hasItems("3000", "750")) //FAIL: validate all sizes are present in response
                .body("soldDate", hasItems("2020-03-10", "2020-01-22")) //FAIL: validate all sizes are present in response
            );

    }

但是,除了验证执行时没有错误的hasSize(2)之外,其他每次尝试似乎都不起作用。

共有1个答案

杜俭
2023-03-14

这将对您有用:

.body("$", hasSize(2))
.body("[0].id", equalTo(22))
.body("[0].type", equalTo("House"))
.body("[0].size", equalTo(3000))
.body("[0].soldDate", equalTo("2021-03-10"))
.body("id", hasItems(22, 27))
.body("type", hasItems("House", "Appartment"))
.body("getAt('size')", hasItems(3000, 750)) //In response: 3000, "750"
.body("soldDate", hasItems("2021-03-10", "2020-01-22"))

>

  • 通过索引获取:删除点。0]. id--

    size是反向关键字,因此size--

  •  类似资料:
    • 问题内容: 我有一个数组: 如果我要转储数组的内容,它们将如下所示: 当我循环浏览并取消设置某些键时,索引将全部升起。 随后,如果我现在又进行了一次转储,它将看起来像: 有没有适当的方法来重置数组,使其元素再次基于零? 问题答案: 尝试这个: 使用array_values()

    • 我目前正在努力熟悉网页的Spring验证。我在网上看到的大多数例子都展示了如何发送验证错误消息。我很好奇如何设置字段的值作为验证的一部分。 下面是一个更好地解释我自己的例子 想象一下,在一个网页上,有一门课记录了一些人的工资细节 getter和setter示例 人员工资不能低于零,因此如果输入负数,该字段将更新为零。 如何做到这一点? 会在验证课上完成吗? 验证类中的示例部分

    • 我想问您,除了像(大小为30个元素)这样一开始就设置数组元素数的限制之外,是否还有一种方法可以在java中设置数组元素数的限制。您能在1到10个元素之间设置限制吗? (或者类似的东西)。 我的第二个问题也许更可行的是,你能不能给元素本身设置一个限制,比如当你需要在之后对它们进行排序时,如果一个元素>=100就会给出错误。类似于:

    • 问题内容: 在golang中,有没有办法查看是否可以将解编入结构的json字段与设置为null的json字段区分开?因为两者都将struct中的值设置为nil,但是我需要知道字段是否以该字段开头,并查看是否有人将其设置为null。 VS 当解组为结构时,两个json均为零。任何有用的资源将不胜感激! 问题答案: 使用以“拖延”解组过程决定做某件事之前要确定原始字节: 参观游乐场https://pl

    • 我在Android应用程序中实施了FB推送活动。但是,我似乎无法运行“推送活动设置验证”。 我有几个问题无法找到答案: “您的设备令牌”来自哪里?在这种情况下,我们谈论的是什么设备。 无法验证用于发送消息的发件人帐户。这可能是由于发送了一个无效的项目号作为密钥,或者密钥可能是有效的,但禁用了GCM服务,或者我们的服务器没有被列入服务器密钥IP的白名单。 根据这篇文章 问题是"GCM发送者ID无效"

    • 问题内容: 我正在从URL获取天气信息。 我得到的是: 如何访问所需的任何元素? 如果我这样做:我收到错误消息: 字符串索引必须是整数,而不是str。 问题答案: 您从url中获得的是一个json字符串。而且您不能直接用索引解析它。您应该将其转换为dict ,然后可以使用index对其进行解析。 与其使用中间方式将其保存到内存,然后将其读取为,不如直接从文件中加载它: