2017-02-09 2 views
1
내가 테스트 POST의 REST 기능을 통해 도움이 필요

, 나는이 REST 기능 헤더 가지고 junit을 사용하여 MultiPart 매개 변수로 REST API를 테스트하는 방법은 무엇입니까?

:

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

을 그리고 내가이 테스트와 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(); 
} 

fileItem 테스트를 실행하는 동안 null 인 경우 REST 함수에 일부 파일을 전달해야합니까?

답변

1

최종 테스트를 사용

@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

코드를 보면 파일 시스템에서 파일을 읽은 다음 objectMapper를 사용하여 JSON으로 변환하려는 것으로 보인다. 이것은 단위 테스트를 작성하는 잘못된 방법이며 단위 테스트에서 파일 시스템에 액세스하지 않으므로 테스트는 격리되어 실행되어야합니다. 다음과 같이 아래 코드

@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(); 
    } 
관련 문제