【问题标题】:How to use Mock HttpServletRequest with mockMvc如何将 Mock HttpServletRequest 与 mockMvc 一起使用
【发布时间】:2020-10-30 05:10:55
【问题描述】:

我正在模拟 HttpServletRequest 和 Mockito 来模拟控制器层,但我得到了错误:

参数不同!通缉: service.validateDeletingProcessBoard( org.springframework.mock.web.MockHttpServletRequest@29caf222, “603b408b-4eb2-4d01-ab90-d30277874415”); -> 在 com.valuestreamer.backend.process.controller.ProcessboardAdminControllerTest.validateDeletingProcessBoardStatus200(ProcessboardAdminControllerTest.java:121) 实际调用有不同的参数: service.validateDeletingProcessBoard( org.springframework.mock.web.MockHttpServletRequest@68b734a8, "603b408b-4eb2-4d01-ab90-d30277874415");

这是我的代码:

MockHttpServletRequest request = new MockHttpServletRequest();
when(this.service.validateDeletingProcessBoard(request,id)).thenReturn(object);
MvcResult result = mockMvc.perform("/api/...").andExpect(status().isOk()).andReturn();

并且控制器的结果为空。 我认为错误是因为何时的对象请求和服务请求可能不同? 我怎么能通过这个案子?

【问题讨论】:

    标签: java junit mocking mockito mockmvc


    【解决方案1】:

    你是对的,这个异常被抛出是因为存根设置与测试执行期间传递的对象不匹配。

    .toString() 在 Stacktrace 中代表这个:

    org.springframework.mock.web.__MockHttpServletRequest@29caf222__, "603b408b-4eb2-4d01-ab90-d30277874415"            
    org.springframework.mock.web.__MockHttpServletRequest@68b734a8__, "603b408b-4eb2-4d01-ab90-d30277874415"
    

    id 参数匹配,但不匹配 MockHttpServletRequest 的实例。

    您可以通过更开放 存根设置来解决这个问题,它不会检查MockHttpServletRequest 的相等性

    when(this.service.validateDeletingProcessBoard(any(MockHttpServletRequest.class),eq(id))).thenReturn(object);
    

    确保org.mockito.ArgumentMatchers 用于any()eq()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-24
      • 1970-01-01
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多