시험

1

내가이 컨트롤러 테스트하기 위해 노력하고 일부 파일의 업로드와 봄 다중/폼 데이터 컨트롤러 :시험

@RequestMapping(value="/u",consumes="multipart/form-data", method = RequestMethod.POST) 
public @ResponseBody String register(
    @RequestParam String u, 
    @RequestParam CommonsMultipartFile filea, 
    @RequestParam CommonsMultipartFile fileb, 
    @RequestParam CommonsMultipartFile filec, 
    @RequestParam CommonsMultipartFile filed) { 

    return "hi"; 
} 

성령 강림절 요청이 모의 : 것 같아요,하지만

mockMvc.perform(
    MockMvcRequestBuilders.fileUpload("/u") 
     .file("filea","id.jpg".getBytes()) 
     .file("fileb","pc.jpg".getBytes()) 
     .file("filec","cl.jpg".getBytes()) 
     .file("filed","fo.jpg".getBytes()) 
     .param("u", u)) 
     .andExpect(MockMvcResultMatchers.status().isOk()) 
     .andDo(MockMvcResultHandlers.print()); 

을 테스트가 실패했기 때문에 MockMvcRequest를 잘못 작성했습니다 (반환 된 상태는 500입니다).

미리 감사드립니다.

답변

1

문제는 매우 작습니다. CommonsMultipartFileMultipartFile으로 변경하면 테스트를 완전히 통과해야합니다.

생성 된 모의 파일 업로드 매개 변수가 MockMultipartFile인데 더 구체적인 CommonsMultipartFile 유형으로 캐스팅 할 수 없습니다.

0

다중 파트 업로드를 테스트하는 간단한 방법은 StandardServletMultipartResolver를 사용하는 것입니다. 및 테스트에이 코드를 사용합니다

final MockPart profilePicture = new MockPart("profilePicture", "stview.jpg", "image/gif", "dsdsdsd".getBytes()); 
    final MockPart userData = new MockPart("userData", "userData", "application/json", "{\"name\":\"test aida\"}".getBytes()); 

    this.mockMvc.perform(
      fileUpload("/endUsers/" + usr.getId().toString()).with(new RequestPostProcessor() { 

       @Override 
       public MockHttpServletRequest postProcessRequest(MockHttpServletRequest request) { 
        request.addPart(profilePicture); 
        request.addPart(userData); 
        return request; 
       } 
      }) 

MockPart 클래스

public class MockPart extends MockMultipartFile implements Part { 

private Map<String, String> headers; 

public MockPart(String name, byte[] content) { 
    super(name, content); 
    init(); 
} 

public MockPart(String name, InputStream contentStream) throws IOException { 
    super(name, contentStream); 
    init(); 
} 

public MockPart(String name, String originalFilename, String contentType, byte[] content) { 
    super(name, originalFilename, contentType, content); 
    init(); 
} 

public MockPart(String name, String originalFilename, String contentType, InputStream contentStream) throws IOException { 
    super(name, originalFilename, contentType, contentStream); 
    init(); 
} 

public void init() { 
    this.headers = new HashMap<String, String>(); 
    if (getOriginalFilename() != null) { 
     this.headers.put("Content-Disposition".toLowerCase(), "form-data; name=\"" + getName() + "\"; filename=\"" + getOriginalFilename() + "\""); 
    } else { 
     this.headers.put("Content-Disposition".toLowerCase(), "form-data; name=\"" + getName() + "\""); 
    } 
    if (getContentType() != null) { 
     this.headers.put("Content-Type".toLowerCase(), getContentType()); 
    } 
} 

@Override 
public void write(String fileName) throws IOException { 
} 

@Override 
public void delete() throws IOException { 
} 

@Override 
public String getHeader(String name) { 
    return this.headers.get(name.toLowerCase()); 
} 

@Override 
public Collection<String> getHeaders(String name) { 
    List<String> res = new ArrayList<String>(); 
    if (getHeader(name) != null) { 
     res.add(getHeader(name)); 
    } 
    return res; 
} 

@Override 
public Collection<String> getHeaderNames() { 
    return this.headers.keySet(); 
} 

}