1

我有一個集成測試,它在我的控制器上發出請求(上傳文件)。 測試的工作原理沒有設置任何CommonsMultipartResolver。但是在必須設置生產環境的那一刻,我必須添加CommonsMultipartResolver。但是這有副作用,我的測試不起作用。 這與產品需要xml配置相同,而不是測試。 我知道有可能爲測試和生產環境定義配置文件。有沒有其他的可能性沒有配置文件?在Spring中使用CommonsMultipartResolver並在測試中配置

的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的配置,那麼我必須記住每次評論配置?

回答

3

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參與測試實際的上傳,你需要編寫一個內存服務器的集成測試。前者可能是大多數情況下需要的,然後使用真實服務器進行一次測試,以確保解析器在配置中應該沒問題。

+0

嗨,txs是你的時間。我喜歡答案,我看到了解決方案。我試圖將示例中的測試適用於我的案例。控制器工作。我必須弄清楚我的情況下授權的其他問題。發送很多。 – java4fun

+0

你有這個問題的解決方案http://stackoverflow.com/questions/32293550/unit-test-of-file-upload-using-mockmvcbuilders-with-standalone-context-and-sprin/32294564? – JeanValjean

相關問題