Установка HttpServletRequest в качестве аргумента метода тестирования с использованием MvcMock

Я пишу junit для одного из методов контроллера с сигнатурой метода, как показано ниже:

@RequestMapping(value="/getTokenizedURL.json",method=RequestMethod.POST)
@ResponseBody
public ResponseData getTokenizedURL(@RequestBody final RequestData requestData, final HttpServletRequest request) throws CustomException

Мне нужно вызвать этот метод с помощью MockMvc, и я могу вызвать его, используя ниже:

mockMvc.perform(post("/user/getTokenizedURL.json")
    .contentType(MediaType.APPLICATION_JSON)
    .content(json))
    .andDo(print())
    .andExpect(status().isOk());

Но проблема в том, что я не могу настроить параметр HttpServletRequest при вызове исходного метода с использованием макета mvc. Без установки аргумента HttpServletRequest мой тест дает проблемы, поскольку это требуется и используется в исходном методе.

Пожалуйста, дайте мне знать, как мне настроить то же самое. Спасибо!


person k_b    schedule 17.11.2015    source источник


Ответы (1)


Идея в том, что вам это не нужно.

MockMvcRequestBuilders#post(..) возвращает MockHttpServletRequestBuilder, который позволяет создавать запрос с любыми значениями, которые вы хотите. Они будут отражены в HttpServletRequest, который будет передан вашему методу обработчика.

Например, вы использовали

.contentType(MediaType.APPLICATION_JSON)

это установит заголовок content-type запроса. В вашем методе обработчика, если вы сделали

request.getHeader("content-type");

вы получите соответствующий String для MediaType.APPLICATION_JSON.

У MockHttpServletRequestBuilder есть "установщики" для каждой части запроса.

person Sotirios Delimanolis    schedule 18.11.2015
comment
О да.. Понял. Я хотел добавить атрибут в сеанс внутри запроса, который я могу сделать, используя ниже: MockHttpSession session = new MockHttpSession(); session.setAttribute(имя пользователя, [email protected]); MockHttpServletRequestBuilder mockBuilder = post(/user/getTokenizedURL.json).contentType(MediaType.APPLICATION_JSON).content(json).session(session).servletPath(/user/getTokenizedURL.json); mockMvc.perform(mockBuilder).andDo(print()).andExpect(status().isOk()); Большое спасибо, Сотириос!!! - person k_b; 19.11.2015