tools & libs/단위테스트(junit, spock)

[spring test] 6. @Controller Test 3 - File upload test

  • -
반응형

이번 포스트에서는 Junit과 MockMvc를 이용해서 file upload를 테스트하는 방법에 대해서 살펴보자.

 

file upload test

 

multipart()

get방식 또는 post 방식의 request를 생성하기 위해서 MockMvcResultBuilders의 get(), post() 메서드를 사용했다면 file upload를 위해서는 multipart()를 사용한다.

multipart()의 반환타입은 MockMultipartHttpServletRequestBuilder  인데 이를 이용해서 file을 등록할 수 있다. 그래도 업로드할 파일은 필요한데 이때는 MockMultipartFile 클래스를 이용한다.

나머지 설정(파라미터, 쿠키 등)은 일반적인 테스트와 동일하다.

 

@Controller 구성

@PostMapping
public ResponseEntity<CustomerDto> regist(@RequestBody CustomerDto dto, 
                                          @RequestParam(required = false) MultipartFile file) 
    throws IllegalStateException, IOException {
	log.debug("dto: {}, file: {}", dto, file);
	service.registCustomer(dto, file);
	return new ResponseEntity<CustomerDto>(dto, HttpStatus.OK);
}

 

단위테스트 구성

@Autowired
ResourceLoader loader;

@Autowired
MockMvc mockMvc;

@Test
public void insertTest() throws Exception {
	// given
	String fileName = "thumb.png";
	Resource res = loader.getResource("classpath:/static/images/" + fileName);
	MockMultipartFile file = new MockMultipartFile("file", fileName, null, res.getInputStream());

	RequestBuilder request = MockMvcRequestBuilders.multipart("/customer/api")
				.file(file)
				.param("name", "name").param("email", "email@abc.net").param("pass", "1234");
	// when
	ResultActions actions =  mockMvc.perform(request);
	// then
	actions.andExpect(status().isOk());
}

 

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.