2011-10-24 11 views
7

मेरे पास एक विधि के साथ एक स्प्रिंग (3.0) नियंत्रक है जिसमें पैरामीटर में से एक के रूप में HttpServletRequest है, क्योंकि यह हैंडलिंग (एकाधिक) फ़ाइल अपलोड है।MockHttpServletRequest के साथ यूनिट परीक्षण फ़ाइल अपलोड कैसे करें?

@RequestMapping(value = "/classified/{idClassified}/dealer/{idPerson}/upload", 
    method = RequestMethod.POST) 
@ResponseBody 
public final String uploadClassifiedPicture(
    @PathVariable int idClassified, 
    @PathVariable int idPerson, 
    @RequestParam String token, 
    HttpServletRequest request); 

यूनिट कैसे परीक्षण करें? मुझे पता है कि मैं MockHttpServletRequest बना सकता हूं, लेकिन मुझे नहीं पता कि इसमें एक या अधिक फाइलें कैसे पास करें।

@RequestMapping(value = "/classified/{idClassified}/dealer/{idPerson}/upload", 
    method = RequestMethod.POST) 
@ResponseBody 
public final String uploadClassifiedPicture(
    @PathVariable int idClassified, 
    @PathVariable int idPerson, 
    @RequestParam String token, 
    @RequestParam MultipartFile content); 

तो फिर तुम एक MockMultipartFile उपयोग कर सकते हैं:

MockHttpServletRequest request = new MockHttpServletRequest("POST", 
    "/classified/38001/dealer/54/upload?token=dfak241adf"); 

उत्तर

9

मैं अपलोड की गई फ़ाइल (प्रकार की MultipartFile(नहीं CommonsMultipartFile)) एक सामान्य पैरामीटर बनाने के लिए, विधि हस्ताक्षर थोड़ा बदलने की अनुशंसा

final String fileName = "test.txt"; 
final byte[] content = "Hallo Word".getBytes(); 
MockMultipartFile mockMultipartFile = 
     new MockMultipartFile("content", fileName, "text/plain", content); 

uploadClassifiedPicture(1, 1, "token", mockMultipartFile); 

: अपने परीक्षण में

यदि आप विधि हस्ताक्षर को बदलना नहीं चाहते हैं, तो आप इसके बजाय MockMultipartHttpServletRequest का उपयोग कर सकते हैं।

इसमें एक विधि addFile(MultipartFile file) है। और निश्चित रूप से आवश्यक पैरामीटर MockMultipartFile हो सकता है।

+0

'MultipartFile', वाकई दिलचस्प लग रहा है, क्योंकि यह अपलोड और फाइल करने के लिए उपयोग अधिक संकीर्णता इंटरफ़ेस बहुत स्पष्ट दिखता है। हालांकि, मुझे डर है कि मैं इसका उपयोग नहीं कर सकता, क्योंकि यह एक समय में केवल एक फ़ाइल का समर्थन करता है और कई फाइलें अपलोड नहीं करता है (फाइलों की संख्या खुली अपलोड करने के लिए, मेरे मामले में 1 से 7 तक)। – stivlo

+0

@stivlo: मल्टीपार्टफाइल के ऐरे के बारे में क्या: 'मल्टीपार्टफाइल [] '? – Ralph

+0

मुझे बस एहसास हुआ कि मैं इसका जवाब देना भूल गया, लेकिन सरणी चाल पूरी तरह से काम करती है, धन्यवाद राल्फ – stivlo

2

तुम भी MockMvc वस्तु के रूप में अच्छी तरह से MockMvcRequestBuilders के रूप में उपयोग कर सकते हैं अपने नियंत्रक के लिए एक परीक्षण फाइल अपलोड अनुरोध भेजने के लिए:

@Test 
public void testSendNotEmptyFile() throws Exception { 

      mvc.perform(MockMvcRequestBuilders.fileUpload("Your controller URL") 
      .file("file", "Test Content".getBytes()) 
      .contentType(MediaType.MULTIPART_FORM_DATA) 
      .accept(MediaType.APPLICATION_JSON)) 
     .andExpect(status().isOk()); 
} 
संबंधित मुद्दे