java - 接受多部分文件的 DELETE 方法的 Mockmvc

标签 java spring-boot mockmvc

我正在尝试为 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 .这很奇怪,因为至少 POSTPUT 通常与 multipart 一起使用。

恐怕在当前版本中,您必须自己 fork 该类并更改 HTTP 方法。

关于java - 接受多部分文件的 DELETE 方法的 Mockmvc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54130293/

相关文章:

Java - 我是否必须在包包含的所有类中注释包?

java - 错误 "cannot resolve method"

java - 在unix和windows中java可执行文件格式是什么

java - SymmetricDS 客户端抛出 AuthenticationException

java - @事务: Not committing at end of transaction; using Spring Boot and neo4j

java - Restdoc 在尝试记录子对象时抛出 org.springframework.restdocs.snippet.SnippetException

spring-boot - 使用 MockMvc 和 Spring REST 文档时重用 Spring Boot ErrorAttributes

java - Java 中的 Sax 解析器编码

tomcat - 与 SpringBootTest 一起使用时,Spring Boot Embedded Tomcat 无法启动

java - 使用 MockMvc junuit 测试获取错误状态错误响应