我正在尝试为 Controller 编写单元测试,该 Controller 具有 DELETE 方法,该方法应接受文件和文本参数。
我知道我可以像这样进行简单的删除:
MvcResult result = mockMvc.perform(MockMvcRequestBuilders.delete(
"/deletecat/catname/Oscar"))
.andExpect(status().isOK)
.andReturn();
我可以像这样对多部分文件执行 POST:
MockMultipartFile multipartFile = new MockMultipartFile("file", new FileInputStream(TEST_RESOURCES_FOLDER + "Cats.csv"));
MvcResult result = mockMvc.perform(MockMvcRequestBuilders.multipart("/uploadcats")
.file(multipartFile)
.param("ownerName", "Austin Powers"))
.andExpect(status().isOk())
.andReturn();
但是当我试图将它们组合在一起并写下这个时:
MvcResult result = mockMvc.perform(
MockMvcRequestBuilders.delete(
"/deletecats",
multipartFile, "Austin Powers"))
.andExpect(status().isOk())
.andReturn();
我收到以下错误:“当前请求不是多部分请求”:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.web.multipart.MultipartException: Current request is not a multipart request
有没有可能是 HTTP 协议(protocol)不支持对 Multipart 文件进行 DELETE?
最佳答案
看来MockMultipartHttpServletRequestBuilder
只支持POST
请求,代表HTTP方法的常量is hard-coded in the constructors .这很奇怪,因为至少 POST
和 PUT
通常与 multipart 一起使用。
恐怕在当前版本中,您必须自己 fork 该类并更改 HTTP 方法。
关于java - 接受多部分文件的 DELETE 方法的 Mockmvc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54130293/