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

2022-09-04 01:44:22

我写了一个测试,它之前成功了,但现在我得到一个断言错误: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']

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


答案 1

我遇到了同样的问题。

溶液:

使用 ,您的响应将是一个字符串。我的回答是:.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

为了解决这个问题,我做了,它的工作原理,因为id是数据中的一个字段。.andExpect(jsonPath("$.data.id", is(1)));


答案 2

您断言您的响应包含值的字段。nameBordeaux

您可以使用 打印响应。this.webClient.perform(...).andDo(print())