如何用MockMultipartFile编写spring-restdocs片段

时间:2016-05-12 08:31:13

标签: java spring spring-mvc spring-restdocs

我使用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)

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

1.1.0.RELEASE的{​​{1}}版本发布以来,您可以使用spring-restdocs

您现在可以使用MockMultipartFile编写spring-restdocs片段,如下所示:

RequestPartsSnippet

此示例摘自官方文档here