我想测试一个RequestMapping,它获取有关项目的一些信息,然后保留它,它还允许上传图像。但是,图像上传不是强制性的,我的 HTML 表单使用的是:enctype="multipart/form-data"
。我正在尝试测试 Controller 而不实际上传任何文件, Controller 如下所示:
@RequestMapping(value="/admin/upload", method=RequestMethod.POST)
public ModelAndView addItem(
@RequestParam(value="id", required=true) Integer id,
@RequestParam(value="name", required=true) String name,
@RequestParam(value="image", required=false) MultipartFile file,
) throws IOException {
// some stuff here
ModelAndView mov = new ModelAndView();
return mov;
}
尽管我已将 required
标志设置为 false
我遇到了缺少参数的问题,但更重要的是,是否可以在模拟Mvc请求允许我测试这个映射而不需要上传任何图像?
mockMvc.perform(post("https://localhost/store-admin/items/itemAddSubmit")
.param("id", 1)
.param("name", "testname").with(csrf()))
.andDo(print());
最佳答案
对于多部分请求,您需要使用 fileUpload
方法而不是 get
、post
或其他方法。
按如下方式更新您的代码 -
mockMvc.perform(fileUpload("https://localhost/store-admin/items/itemAddSubmit")
.param("id", 1)
.param("name", "testname").with(csrf()))
.andDo(print());
要实际发送文件,请使用 file
函数和 fileUpload
,如下所示 -
mockMvc.perform(fileUpload("https://localhost/store-admin/items/itemAddSubmit")
.file(myMockMultipartFile)
.param("id", 1)
.param("name", "testname").with(csrf()))
.andDo(print());
其中 myMockMultipartFile
是一个 MockMultipartFile
对象。
关于java - 尝试使用 MockMvc 进行测试而不上传任何文件时出现 "The current request is not a multipart request",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38616437/