从HttpServletRequest到MultipartHttpServletRequest:Junit中的ClassCastException

时间:2018-07-24 13:29:14

标签: java spring junit mockito classcastexception

我正在尝试为包含以下方法的Controller类编写Junit测试。

 @RequestMapping(value = "/mappingUrl", method = RequestMethod.POST)
public String uploadFileMethod(HttpServletResponse httpResponse, HttpServletRequest httpRequest, ModelMap model) throws Exception {

  try {
    MultipartFile multipartFile = ((MultipartHttpServletRequest) httpRequest).getFile("fileName");
   }
  catch(Exception e){}
}

在测试课中,我有以下方法

 @Test
public void testUploadFileMethod() throws Exception {
mockMVC.perform(post("/mappingUrl")).andExpect(status().isOk());
}

执行测试时出现以下异常:

java.lang.ClassCastException: org.springframework.mock.web.MockHttpServletRequest cannot be cast to org.springframework.web.multipart.MultipartHttpServletRequest

有没有一种方法可以在不更改现有代码的情况下测试该方法?该类已在整个应用程序中使用,恐怕会破坏其他内容。

我遇到了类似的问题,以下是很接近的问题:

Mockito ClassCastException - A mock cannot be cast

pass remoteUser value in HttpServletRequest to mockmvc perform test

1 个答案:

答案 0 :(得分:0)

只需尝试

MockMultipartFile myFile = new MockMultipartFile("data", "myFile.txt", "text/plain", "myFileContent".getBytes());
mockMVC.perform(MockMvcRequestBuilders.multipart("/mappingUrl")
                    .file(myFile)).andExpect(status().isOk());

here

所述