2017-02-09 3 views
1

ich etwas Hilfe über Test POST REST-Funktion benötigen,Wie testet man REST-API mit MultiPart-Parameter mit Junit?

ich diesen REST Funktionskopf bekam:

@RequestMapping(value = "/import", method = RequestMethod.POST) 
    public @ResponseBody 
    HistoricalDataImportResponse importHistoricalDataFile(String fileFormat, @RequestParam("file") MultipartFile stream) { 

Und ich versuchte Test es mit diesem Test mit JUnit:

@Test 
public void testHistoricalDataImport() throws Exception { 
    ObjectMapper mapper = new ObjectMapper(); 
    FileItem fileItem = new DiskFileItem(null, null, false, null, 0, null); 
    MultipartFile eventRequest = new CommonsMultipartFile(null); 
    String body = mapper.writeValueAsString(eventRequest); 

    //when 
    MvcResult result = this.mockMvc.perform(post("/historicaldata/import").contentType(MediaType.MULTIPART_FORM_DATA).content(body)) 
      .andExpect(status().isOk()) 
      .andReturn(); 
} 

Die fileItem ist NULL beim Ausführen des Tests, wie muss ich eine Datei an meine REST-Funktion übergeben?

Antwort

1

Endtest wie folgt:

@Test 
    public void testHistoricalDataImport() throws Exception { 
     MockMultipartFile firstFile = new MockMultipartFile("file", "filename.csv", "text/plain", "some CSV data".getBytes()); 
     MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.fileUpload("/historicaldata/import") 
       .file(firstFile); 

     MvcResult result = mockMvc.perform(requestBuilder) 
       .andExpect(status().isOk()) 
       .andReturn(); 
    } 
0

Wenn Sie Ihren Code betrachten, scheint es, dass Sie eine Datei aus dem Dateisystem lesen und dann mithilfe von objectMapper in JSON konvertieren möchten. Dies ist ein falscher Weg, einen Komponententest zu schreiben. Sie greifen nicht auf das Dateisystem aus dem Komponententest zu, Ihre Tests sollten isoliert ausgeführt werden. Verwenden Sie den Code unten

@Test 
    public void testHistoricalDataImport() throws Exception { 
    MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.fileUpload("/historicaldata/import") 
      .file("filename","some data as file text".getBytes()); 

    MvcResult result = mockMvc.perform(requestBuilder).andExpect(status().isOk()).andReturn(); 
    } 
Verwandte Themen