gpt4 book ai didi

json - 使用 Hamcrest 和 JsonPath : How count the body size? 的 Spring MVC 测试(不计算成员)

转载 作者:行者123 更新时间:2023-12-04 17:57:09 26 4
gpt4 key购买 nike

我正在与:

  • Spring MVC 测试
  • 火腿
  • JsonPath

  • 我有以下如何来自服务器的响应:
    MockHttpServletResponse:
    Status = 200
    Error message = null
    Headers = {Content-Type=[application/json;charset=UTF-8]}
    Content type = application/json;charset=UTF-8
    Body = {
    "id" : "100",
    "nombre" : "Jesús Você",
    "apellido" : "Mão Nuñez",
    "fecha" : "1977-12-08"
    }
    Forwarded URL = null
    Redirected URL = null

    以下按预期工作(有效):
     .andExpect(jsonPath("$").exists())
    .andExpect(jsonPath("$", notNullValue()))
    .andExpect(jsonPath("$", isA(LinkedHashMap.class)))

    .andExpect(jsonPath("$.*").exists())
    .andExpect(jsonPath("$.*", notNullValue()))
    .andExpect(jsonPath("$.*", isA(JSONArray.class)))
    .andExpect(jsonPath("$.*", hasSize(is(4))))

    我需要测试一下 ("$")是 1. 确认存在 1 个项目。它再次确认以下内容:
    Body = {
    "id" : "100",
    "nombre" : "Jesús Você",
    "apellido" : "Mão Nuñez",
    "fecha" : "1977-12-08"
    }

    我试过了:
    .andExpect(jsonPath("$", hasSize(is(1))))

    观察 $之间的区别和 $.* ,对于后者,我知道它计算字段数。但从前者我总是得到:
    java.lang.AssertionError: JSON path "$"
    Expected: a collection with size is <1>
    but: was <{id=100, nombre=Jesús Você, apellido=Mão Nuñez, fecha=1977-12-08}>
    at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:18

    “似乎”数据不是集合,但请记住 .andExpect(jsonPath("$", isA(LinkedHashMap.class)))经过。我在某种程度上感到困惑。

    因此可以测试 ("$")是 1.?如果是,如何?

    我已阅读 count members with jsonpath?

    并说:

    To test size of array: jsonPath("$", hasSize(4))

    To count members of object: jsonPath("$.*", hasSize(4))



    我返回的数据不是数组,而是 LinkedHashMap.class因为如果我使用 .andExpect(jsonPath("$").isArray())我得到:
    java.lang.AssertionError: Expected an array at JSON path "$" but found: {id=100, nombre=Jesús Você, apellido=Mão Nuñez, fecha=1977-12-08}
    Expected: an instance of java.util.List
    but: <{id=100, nombre=Jesús Você, apellido=Mão Nuñez, fecha=1977-12-08}> is a java.util.LinkedHashMap

    顺便说一句: .andExpect(jsonPath("$.*").isArray())经过。

    最佳答案

    验证 的大小 map 代替:

    .andExpect(jsonPath("$", hasSize(1)))
    你应该使用:
    .andExpect(jsonPath("$", aMapWithSize(1)))
    备注 : 检查这个 link与 org.hamcrest.Matchers javadoc

    关于json - 使用 Hamcrest 和 JsonPath : How count the body size? 的 Spring MVC 测试(不计算成员),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39473631/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com