2016-05-23 17 views
0

Ich habe einen Unit-Test heraus zu tragen auf der Grundlage der folgenden Methode:Feder Unit-Test: Illegal für MultipartHttpServletRequest

@RequestMapping(value = "/query") 
    public class QueryController { 
    ... 
    @RequestMapping(value = "/att/handle", method = RequestMethod.POST) 
    public @ResponseBody 
    String handleUpload(MultipartHttpServletRequest request, HttpServletResponse response) throws IOException { 

     JsonResponseDto responseDto = null; 
     HashMap<Long, String> attachmentInfoMap = null; 


     String licNo = request.getParameter("licNo"); 
     String queId = request.getParameter("queId"); 

     .... 

Bitte meine Unit-Test zu finden unter:

@RunWith(PowerMockRunner.class) 
    public class QueryControllerTest { 


    @InjectMocks 
private QueryController queryController; 
private MockMvc mockMvc; 
private MockMultipartHttpServletRequest request; 
private MockHttpServletResponse response; 
private MockHttpSession session; 


    @Before 
    public void setup() { 

    request = new MockMultipartHttpServletRequest(); 

    request.setAttribute(DispatcherServlet.OUTPUT_FLASH_MAP_ATTRIBUTE, new FlashMap()); 
    response = new MockHttpServletResponse(); 
    session = new MockHttpSession(); 
    request.setSession(session); 
    RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(request)); 

    //Added viewResolver to prevent circular view path error 
    InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); 
    viewResolver.setPrefix("/WEB-INF/jsp/"); 
    viewResolver.setSuffix(".jsp"); 

    this.mockMvc = MockMvcBuilders.standaloneSetup(queryController).setViewResolvers(viewResolver).build(); 

} 


@Test 
public void handleUploadQueryAttachmentsOK() throws Exception { 


    mockMvc.perform(post("/query/att/handle").param("queId", "123").param("licNo", "12")) 
       .andExpect(status().isFound() 
      ); 

} 

Wenn ich das Gerät ausführen Test der folgende Fehler wird angezeigt:

Irgendeine Idee, wie ich das oben genannte erro lösen kann r Nachricht bitte?

+0

Durch den Test korrekt einrichten. Sie fordern, Antwort und Sitzung sind nutzlos. Diese werden nicht verwendet, dasselbe gilt für das Setup, das Sie tun. In deinem '@ Before' solltest du nur das' MockMvc' einrichten und das wars. Als nächstes ist Ihre Anfrage fehlerhaft, da es sich um einen einfachen Beitrag und nicht um einen mehrteiligen Beitrag handelt. Sie sollten den Inhaltstyp ändern. –

+0

Wollen Sie wirklich die Datei hochladen oder einfach nur zwei Anfrageparameter "licNo" und "queId" senden? Ich habe im Test keinen Datei-Upload-Code gefunden. – Braj

Antwort

0

Sie haben Datei hochladen mit MockMvcRequestBuilders.fileUpload()MultipartHttpServletRequest es zu testen.

Zum Beispiel:

@Test 
public void uploadImage() throws Exception { 
    String data = "test-data"; 
    MockMultipartFile imageFile = new MockMultipartFile("image", "my-image.jpeg", "image/jpeg", data.getBytes()); 
    mockMvc.perform(MockMvcRequestBuilders.fileUpload("/query/att/handle").file(imageFile).param("queId", "123").param("licNo", "12")); 
} 

Hier ist thread für gleiche Diskussion um ihn herum.


Verwenden @RequestParam Anmerkung auf Anfrage Parameter zuzugreifen, anstatt sie von HttpServletRequest erreichbar. Spring Framework macht es automatisch nur für Sie.

Zum Beispiel:

@RequestMapping(value = "/att/handle", method = RequestMethod.POST) 
public @ResponseBody 
String handleUpload(@RequestParam String licNo, @RequestParam String queId, ...) throws IOException { ... }