java - 如何使用 MockMultipartFile 编写 spring-restdocs 片段

标签 java spring spring-mvc spring-restdocs

我将 spring 单元测试与 spring-restdocs 结合使用。

这是我的 mockmvc 代码:

mockMvc.perform(fileUpload("/api/enterprise/uploadImage")
                .file(imageFile)
                .with(csrf().asHeader())
                .params(params)
).andExpect(status().isOk());

但是当使用 spring-restdocs 时,我不知道如何编写提交的文件片段。

这是我的片段创建代码:

document.snippets(
            requestParameters(
                    parameterWithName("file").description("upload file"),
                    parameterWithName("imageType").description("image type")
            )
    );

这样我得到一个错误:

org.springframework.restdocs.snippet.SnippetException: Request parameters with the following names were not found in the request: [file]
at org.springframework.restdocs.request.RequestParametersSnippet.verificationFailed(RequestParametersSnippet.java:79)
at org.springframework.restdocs.request.AbstractParametersSnippet.verifyParameterDescriptors(AbstractParametersSnippet.java:93)
at org.springframework.restdocs.request.AbstractParametersSnippet.createModel(AbstractParametersSnippet.java:70)
at org.springframework.restdocs.snippet.TemplatedSnippet.document(TemplatedSnippet.java:64)
at org.springframework.restdocs.mockmvc.RestDocumentationResultHandler.handle(RestDocumentationResultHandler.java:101)
at org.springframework.test.web.servlet.MockMvc.applyDefaultResultActions(MockMvc.java:195)
at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:163)
at com.athena.edge.enterprise.controller.UploadImageTest.uploadImage(UploadImageTest.java:108)

最佳答案

您正在发送一个多部分请求,因此正在上传的文件不是请求参数。相反,它是请求中的部分之一,并且 你的测试失败了,因为你试图记录一个不存在的请求参数。

Spring REST Docs 目前不支持记录多部分请求中的部分。有一个 open issue for it .我还没有实现任何东西,因为请求部分可能非常复杂。例如,在某些情况下,部件名称和描述可能就足够了,但在其他情况下,记录部件的标题、内容结构等可能很有用。

请评论与上述相关的问题,特别是如果对最简单情况的支持会有用的话。

关于java - 如何使用 MockMultipartFile 编写 spring-restdocs 片段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37181396/

相关文章:

facebook-graph-api - 将 Spring Security 与 Facebook 登录集成

java - 单击 imageView 时如何显示项目

java - 使用循环执行actionPerformed(在单击按钮上)

java - 未打印 Spring Boot 安全密码

java - Spring boot RESTful 服务作为 WAR 而不是 JAR

java - spring 表单 vs html 表单

java - 如何在JAVA中读取/导出从SQL Server输出的XML文件

java - 获取和设置首选项值

java - web-app 的 context-param 和 servlet 的 init-param 之间的区别?

spring - 避免在单个 jar 中合并多个 spring 依赖项时覆盖 spring.handlers/spring.schemas 的想法