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

应为:null,但:was-Hamcrest和jsonPath

姬高澹
2023-03-14

我想断言来自rest控制器的json输出,但我得到“预期:null but: was

mockMvc.perform(post(TEST_ENDPOINT)
            .param("someParam", SOMEPARAM)
            .andDo(print())
            .andExpect(status().is2xxSuccessful())
            .andExpect(jsonPath("*.errorMessage").value(IsNull.nullValue())); 

Json:

{
    "some_string": {
        "errorMessage": null
    }
}

我发现了类似的问题,如何用Hamcrest断言某个东西为空?,但这两个答案都不管用。也许这是由于jsonPath,因为它在[]括号中返回空值?这是断言框架的错误吗?

共有1个答案

邢献
2023-03-14

JSONPath将始终根据文档返回一个数组,

请注意,jsonPath的返回值是一个数组,它也是一个有效的JSON结构。因此,您可能希望再次将jsonPath应用于结果结构,或者使用您最喜欢的数组方法之一作为排序。

根据此处的结果部分[JSONPath-JSON的XPath]:(http://goessner.net/articles/JsonPath/index.html)

这样就排除了

因为它在[]括号中返回空值

nullValue的工作原理如下

import static org.hamcrest.CoreMatchers.nullValue;
....
.andExpect(jsonPath("some_string.errorMessage", nullValue()))

import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.nullValue;
....
.andExpect(jsonPath("some_string.errorMessage", is(nullValue())))

正如在这里找到的答案中提到的如何断言Hamcrest的某些内容为空?

 类似资料:
  • 我正在用MockMvc做一些测试,我想验证JSON响应的结构。具体地说,我希望确保某个属性的键存在,并且该值是某种类型或NULL。 是否有任何聪明的Hamcrest匹配器可以应用于每个属性的单个json路径?

  • 我编写了一个功能并与我正在使用改装,但总是“失败” 获取: LoginAPI.java: 登录活动.java: User.java: 日志说 下面是我的< code>login.php脚本:

  • 问题内容: 之间有什么区别 和 为何后者不起作用? 问题答案: 在SQL中,之间的比较值,任何其他值(包括另一种使用比较操作符(如),,,等)将导致,这被认为是一个where子句的目的(严格来说,它的“不true”,而不是“false”,但效果相同)。 原因是a的意思是“未知”,因此与a进行任何比较的结果也都是“未知”。因此,通过编码您不会对行造成任何影响。 SQL提供了一种特殊的语法来测试列是否

  • 问题内容: 是否有人将Hamcrest与TestNG集成在一起,以便其匹配器可以轻松地用于TestNG断言中? 问题答案: 简而言之,要回答您的问题:您不需要将TestNG与Hamcrest集成。只需直接调用哪个抛出。 背景 我通过Google找到了您的问题,想知道完全一样的问题。在进一步谷歌搜索之后,我没有找到满意的答案,因此我阅读了JUnit与Hamcrest集成的源代码。 对于JUnit,通

  • 我在4.10版本中使用junit,在1.3版本中声明了hamcrest核心,在1.3版本中声明了hamcrest库。我的问题是hamcrest库和hamcrest核心是否嵌入junit 4.10。那么junit 4.11呢?