在春季测试返回响应实体<>的 POST 方法



我正在尝试测试我的帖子方法,该方法返回响应范围&lt;>在服务类中:

public ResponseEntity<Customer> addCustomer(Customer customer) {
    [validation etc...]
    return new ResponseEntity<>(repository.save(customer), HttpStatus.OK);
}

我在做什么:

    @Test
public void addCustomer() throws Exception {
    String json = "{" +
            ""name": "Test Name"," +
            ""email": "test@email.com"" +
            "}";
    Customer customer = new Customer("Test Name", "test@email.com");
    when(service.addCustomer(customer))
            .thenReturn(new ResponseEntity<>(customer, HttpStatus.OK));
    this.mockMvc.perform(post(CustomerController.URI)
            .contentType(MediaType.APPLICATION_JSON)
            .content(json)
            .accept(MediaType.APPLICATION_JSON))
            .andExpect(status().isOk())
            .andExpect(jsonPath("$.id").exists())
            .andExpect(jsonPath("$.name", is("Test Name")))
            .andExpect(jsonPath("$.email", is("test@email.com")))
            .andExpect(jsonPath("$.*", hasSize(3)))
            .andDo(print());
}

运行我收到的测试时:

java.lang.AssertionError: No value at JSON path "$.id"

和状态=200。据我了解,莫科托没有返回对象。其他方法(例如,工作都很好,但是它们都会返回对象,而不是响应词&lt;>。我在做什么错,我该如何解决?

问题是您在测试代码中创建了一个Customer,此Customer与生产代码中的Customer不同。

因此,Mockito不能匹配两个Customer,并且导致when/thenReturn表达式失败。因此, service.addCustomer返回 null,然后在测试结果中获得断言。

您可以使用any() Matcher解决此问题:

when(service.addCustomer(any())).thenReturn(.....);

相关内容

  • 没有找到相关文章

最新更新