2017-02-09 25 views
1

私はこのREST機能ヘッダーましjunitを使用してMultiPartパラメータでREST APIをテストするにはどうすればよいですか?

、テストPOST REST機能の上にいくつかの助けが必要です:

@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(); 
    } 
関連する問題