как писать фрагменты spring-restdocs с помощью MockMultipartFile

Я использую весенний модульный тест с 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)

person Joseph Wang    schedule 12.05.2016    source источник


Ответы (2)


Вы отправляете запрос, состоящий из нескольких частей, поэтому загружаемый файл не является параметром запроса. Вместо этого это одна из частей запроса, и ваш тест не проходит, потому что вы пытаетесь задокументировать несуществующий параметр запроса.

Spring REST Docs на данный момент не поддерживает документирование частей в составном запросе. Для него есть открытая проблема. Я еще ничего не реализовал, так как части запроса могут быть довольно сложными. Например, в некоторых случаях может быть достаточно названия части и описания, но в других может быть полезно документировать заголовки части, структуру ее содержимого и т. д.

Пожалуйста, прокомментируйте проблему, указанную выше, особенно если будет полезна поддержка простейшего случая.

person Andy Wilkinson    schedule 12.05.2016
comment
Спасибо. Я использовал настройку реализации документа частей запроса. и решить эту проблему. - person Joseph Wang; 27.05.2016

С момента выпуска версии 1.1.0.RELEASE из spring-restdocs вы можете использовать RequestPartsSnippet.

Теперь вы можете писать фрагменты spring-restdocs с помощью MockMultipartFile следующим образом:

mockMvc.perform(multipart("/upload").file("file", "example".getBytes())) 
    .andExpect(status().isOk())
    .andDo(document("upload", RequestPartsSnippet.requestParts( 
        RequestPartDescriptor.partWithName("file").description("The file to upload")) 
));

Этот пример взят из официальной документации здесь.

person cheneym    schedule 12.08.2020