【问题标题】:How to assert JSON value?如何断言 JSON 值?
【发布时间】:2021-07-16 12:41:43
【问题描述】:

鉴于以下从 REST 调用返回的 JSON:

{"Statistik Eintraege":
[{"Wert":"1","Anzahl":41},
{"Wert":"","Anzahl":482},
{"Wert":"-3","Anzahl":1},
{"Wert":"-1","Anzahl":3},
{"Wert":"-2","Anzahl":3}],
"Statistik Typ":"BlahStatistik"}

...我想验证 Wert='' 的“Anzahl”,即本例中的:482。

我在 java 集成测试中尝试的是:

.andExpect(jsonPath("$..[?(@.Wert == '')].Anzahl", hasSize(482)));

例外:

 java.lang.AssertionError: JSON path "$..[?(@.Wert == '')].Anzahl"
    Expected: a collection with size <482>
         but: collection size was <1>

我还能尝试什么?

【问题讨论】:

  • 我不知道,但我确信hasSize 不是正确的断言,是您错误的直接原因。你没有一些isEqualTo 或类似的吗?
  • 确实,hasSize 会检查那里是否有一个包含 482 个值的数组,而不是如果你有一个值为 482 的数字。
  • 我试过了: .andExpect(jsonPath("$..[?(@.Wert == '')].Anzahl", equalTo(482)));它似乎更好: java.lang.AssertionError: JSON path "$..[?(@.Wert == '')].Anzahl" 预期: 但是:是 所以更好,但还没有解决...
  • 通过以下方式解决它:.andExpect(jsonPath("$..[?(@.Wert == '')].Anzahl").value(482));

标签: java json spring testing


【解决方案1】:

解决者:

.andExpect(jsonPath("$..[?(@.Wert == '')].Anzahl").value(482));

但为什么会出现以下情况:

.andExpect(jsonPath("$..[?(@.Wert == '')].Anzahl", greaterThan(400)))

抛出错误?

java.lang.ClassCastException: class net.minidev.json.JSONArray cannot be cast to class java.lang.Comparable (net.minidev.json.JSONArray is in unnamed module of loader 'app'; java.lang.Comparable is in module java.base of loader 'bootstrap')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多