【问题标题】:Assertion value not matching for a field in body断言值与正文中的字段不匹配
【发布时间】:2019-06-04 20:49:17
【问题描述】:

我在 RestAssured 中进行 POC 时点击了 google 地点搜索 API。

以下是我得到的回复。我正在写一个断言来匹配 'location' 下的 'lat' 的值。

我尝试过的断言如下-

body("obj.candidates[0].geometry.location.lat",equalTo("-33.8599358"));

{
    "candidates": [
        {
            "formatted_address": "140 George St, The Rocks NSW 2000, Australia",
            "geometry": {
                "location": {
                    "lat": -33.8599358,
                    "lng": 151.2090295
                },
                "viewport": {
                    "northeast": {
                        "lat": -33.85824767010727,
                        "lng": 151.2102470798928
                    },
                    "southwest": {
                        "lat": -33.86094732989272,
                        "lng": 151.2075474201073
                    }
                }
            },
            "name": "Museum of Contemporary Art Australia",
            "opening_hours": {
                "open_now": false
            },
            "photos": [
                {
                    "height": 2736,
                    "html_attributions": [
                        "<a href=\"https://maps.google.com/maps/contrib/108440264878062594882/photos\">Kun-Lin Tsou</a>"
                    ],
                    "photo_reference": "CmRaAAAA1K9W8-AwTJ953e-cj2DdF0bhf5uVpnHcmBoSF4Cz5rlEjkODupFUCeGuim6Ryx4j0-jKU-jnpYch1xWV4UfWxbZZhzoXBuY8opP9gVZ_Z03mMyPa71lzYRAf5gAWX4bpEhAcia7kO56eCSu6x7IRSTTBGhTQK4-BGWyFhpvUZESi3axcejZP_Q",
                    "width": 3648
                }
            ],
            "rating": 4.4
        }
    ],
    "status": "OK"
}

但是当我运行程序时出现如下错误-

线程“main”java.lang.AssertionError 中的异常:1 预期失败。 JSON 路径 obj.candidates[0].geometry.location.lat 不匹配。 预期:-33.8599358 实际:空

当我使用邮递员运行请求时,我得到了如上所述的有效响应以及针对它的有效数据。我不明白为什么在检查断言时它会根据实际结果字段获得“空”值。

谁能帮我找出这里的问题?

【问题讨论】:

    标签: api google-places-api


    【解决方案1】:

    您收到该异常是因为您的回复中没有名称为 obj 的字段。只需从路径表达式中删除 obj 并使用 candidates[0].geometry.location.lat

    从外观上看,我相信您是在尝试使用 obj 引用 json 有效负载的“根”。如果是这样,那么知道你不需要。在 REST-assured 中,路径表达式总是 relative 到根。但以防万一,您可以使用restAssuredJsonRootObject 引用 REST-assured 中 json 的根,尽管这不是公开的。查看来自 REST-assured 的创始人和作者 Johan 的 this answer

    【讨论】:

      【解决方案2】:

      您可以使用 jsonpath 作为响应访问该字段:

      assertThat(response.jsonpath().get("candidates[0].geometry.location.lat"), equalTo("-33.8599358"));
      

      如果你遇到反序列化异常,请将 jackson-databind 放入你的 pom.xml。

      【讨论】:

        猜你喜欢
        • 2021-04-13
        • 1970-01-01
        • 2017-08-11
        • 2018-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-11
        • 2021-03-16
        相关资源
        最近更新 更多