断言错误:JUnit 测试中的 JSON 路径没有值

新手上路,请多包涵

我已经编写了一个测试并且它之前成功了但现在我得到一个 AssertionError:JSON Path 没有值。

 @Test
public void testCreate() throws Exception {
    Wine wine = new Wine();
    wine.setName("Bordeaux");
    wine.setCost(BigDecimal.valueOf(10.55));

    new Expectations() {
        {
            wineService.create((WineDTO) any);
            result = wine;
        }
    };

    MockMultipartFile jsonFile = new MockMultipartFile("form", "", "application/json", "{\"name\":\"Bordeaux\", \"cost\": \"10.55\"}".getBytes());
    this.webClient.perform(MockMvcRequestBuilders.fileUpload("/wine").file(jsonFile))
            .andExpect(MockMvcResultMatchers.status().is(200))
            .andExpect(MockMvcResultMatchers.jsonPath("$.name").value("Bordeaux"))
            .andExpect(MockMvcResultMatchers.jsonPath("$.cost").value(10.55));
}

我得到的错误是:

 java.lang.AssertionError: No value for JSON path: $.name, exception: No results path for $['name']

我不明白它没有得到什么或缺少什么。

原文由 Robin van Aalst 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 830
2 个回答

您断言您的响应包含一个字段 name 其值为 Bordeaux

您可以使用 this.webClient.perform(...).andDo(print()) 打印您的回复。

原文由 Mathias Dpunkt 发布,翻译遵循 CC BY-SA 3.0 许可协议

我遇到了同样的问题。

解决方案 :

使用 .andReturn().getResponse().getContentAsString(); ,您的响应将是一个字符串。我的回答是:

 {"url":null,"status":200,"data":{"id":1,"contractName":"Test contract"}

当我尝试做 .andExpect(jsonPath("$.id", is(1))); 时出现错误: java.lang.AssertionError: No value for JSON path: $.id

为了修复它,我做了 .andExpect(jsonPath("$.data.id", is(1))); 并且它有效,因为 id 是数据中的一个字段。

原文由 Nagesh Dalave 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题