【问题标题】:Use CommonsMultipartResolver in Spring and config in test在 Spring 中使用 CommonsMultipartResolver 并在测试中配置
【发布时间】:2014-06-24 13:45:31
【问题描述】:

我有一个集成测试,它在我的控制器上发出请求(上传文件)。 该测试无需设置任何 CommonsMultipartResolver 即可工作。但是在我必须设置生产环境的那一刻,我必须添加 CommonsMultipartResolver。但这有副作用,我的测试不起作用。 同样,生产需要xml配置,而不是测试。 我知道可以为测试和生产环境定义配置文件。还有没有其他可能没有个人资料?

multipartresolver的配置很简单:

<bean id="multipartResolver"
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
    p:maxUploadSize="1000000000">
</bean>

而且我的测试也很简单:

MockMultipartFile aFileObject = new MockMultipartFile("file", "filename.txt", "text/plain", "a File message".getBytes());
HashMap<String, String> contentTypeParams = new HashMap<String, String>();
contentTypeParams.put("boundary", "xyz");
MediaType mediaType = new MediaType("multipart", "form-data", contentTypeParams);
MockHttpServletRequestBuilder action = fileUpload(path).file(aFileObject));

mockMvc=MockMvcBuilders.webAppContextSetup(webApplicationContext)
     .addFilter(new DelegatingFilterProxy("springSecurityFilterChain", webApplicationContext), "/*")
     .build()

ResultActions resultPost =mockMvc.perform(action.contentType(mediaType));
assertThat(.....

(我已经简化了一点测试代码(这不是这里的问题。它有效。))

有谁知道我如何在测试运行时弄清楚 Multipartresolver 的配置,并在我将所有内容投入生产时启用,而我每次都必须记住评论配置?

【问题讨论】:

    标签: production-environment spring-test spring-data-rest xml-configuration test-environments


    【解决方案1】:

    MockMvc 不与 Servlet 容器一起运行。它使用 MockHttpServletRequest/Response,这意味着您手动设置请求。这包括文件上传。本质上,通过使用 fileUpload(..).file(..) 构建请求,您手动设置了 MockMultipartHttpServletRequest(与 MultipartResolver 在运行时在实际 Servlet 容器中执行的操作相同)。所以当 DispatcherServlet 处理这个请求时,它意识到这个请求已经被解析为一个多部分请求,并且很高兴继续前进,而不必调用 MultipartResolver。

    底线,如果您想测试控制器对多部分请求的作用,它应该可以正常工作(参见示例测试:https://github.com/spring-projects/spring-framework/blob/master/spring-test/src/test/java/org/springframework/test/web/servlet/samples/standalone/FileUploadControllerTests.java)。如果您想使用 MultipartResolver 参与测试实际上传,则需要使用内存服务器编写集成测试。大多数情况下,您可能需要前者,然后使用真实服务器进行一次测试以确保您的解析器在配置中应该没问题。

    【讨论】:

    • 嗨,时间到了。我喜欢这个答案,我看到了解决方案。我试图将示例中的测试调整到我的案例中。控制器工作。我必须为我的案例找出另一个与授权有关的问题。发送很多。
    • 你有这个问题的解决方案stackoverflow.com/questions/32293550/… 吗?
    猜你喜欢
    • 1970-01-01
    • 2015-08-26
    • 2015-06-14
    • 1970-01-01
    • 2019-03-25
    • 2018-11-02
    • 2020-01-10
    • 2021-05-22
    • 2018-02-11
    相关资源
    最近更新 更多