在 spring test mvc 中设置请求部分

ben*_*n.d 7 java spring spring-mvc spring-test spring-mvc-test

我正在尝试测试(通过 Spring 测试(mvc))一个使用的控制器servletRequest.getParts()

到目前为止我所读到的就是MockMvcRequestBuilders.fileUpload().file()解决方案。但是我无法让它发挥作用。我编写了以下失败的测试

MockMultipartHttpServletRequestBuilder builder = MockMvcRequestBuilders.fileUpload("/foo")
            .file(new MockMultipartFile("file", new byte[] { 1, 2, 3, 4 }));
MockHttpServletRequest rq = builder.buildRequest(null);
Assert.assertEquals(1, rq.getParts().size()); // result 0
Run Code Online (Sandbox Code Playgroud)

我浏览了 spring 代码,并且调用file(...)添加了一个元素,List<MockMultipartFile>getParts()从另一个列表获取其元素时(Map<String, Part> parts)

必须有另一种方法来做到这一点......

编辑1

我用来测试控制器的代码是:

ResultActions result = mockMvc.perform(
            MockMvcRequestBuilders.fileUpload(new URI("/url")).file("param", "expected".getBytes()))
Run Code Online (Sandbox Code Playgroud)

Sam*_*nen 5

目前Spring MVC 测试框架javax.servlet.http.Part不支持测试。

因此,我在 Spring Framework 5.0 中引入了两个解决方案来解决这个缺点:

在此期间,您应该能够嘲笑自己并通过自定义Part将其注册到准备中。MockHttpServletRequestRequestPostProcessor

问候,

Sam(Spring TestContext 框架的作者