Mock Mvc доступ к объекту MockHttpServletRequest, который будет использовать mock Mvc - PullRequest
0 голосов
/ 28 февраля 2020

Есть ли в любом случае получить фактический объект запроса, который mock Mvc будет использовать при выполнении: mock Mvc .perform (RequestBuilder requestBuilder)

Я знаю, что могу построить запрос Я сам (т.е.)

Integer id = new Integer(1);
MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/myPath").param(Constants.ACTION, Constants.GET_DETAIL)
  .param(Constants.ID, id.toString());
MockHttpServletRequest request = requestBuilder.buildRequest(wac.getServletContext());

, но я не могу передать этот запрос, так как метод mock Mvc .perform специально принимает только конструктор, который создаст новый экземпляр MockHttpServletRequest. Я использую EasyMock, который использует equals () в своих сопоставителях (по крайней мере по умолчанию), и из-за отсутствия реализации equals () в MockHttpServletRequest он просто сравнивает идентификаторы объектов. то есть

      EasyMock.reset(localeHelper);

  localeHelper.getLocale(request);
  EasyMock.expectLastCall().andReturn(locale);
  /* this matcher will always fail because the request object is rebuilt by the mockMvc.perform(requestBuilder) call 
    and MockHttpServletRequest does not have an equals() method that these mocking tools can fall back on for object equivalency */
  EasyMock.replay(localeHelper);

1 Ответ

0 голосов
/ 09 марта 2020

Вы, вероятно, хотите захватить.

Capture<HttpServletRequest> capture  = EasyMock.newCapture();
EasyMock.expect(localeHelper.getLocale(EasyMock.capture(capture))).andReturn(locale);
EasyMock.replay(localeHelper);

mockMvc.perform(requestBuilder);

HttpServletRequest request = capture.getValue();
// Then assert whatever you want on the `request` that was received in parameter by the mock
...