예외를 던지도록하는 테스트를 할 때 Exception 안에 메시지를 활용할 경우 Exception.class 를 사용하지말 고 new Exception()을 사용하자.
일단 예외 클래스를 보자
/**
* 이미 종료된 대회일 때 예외
*
* @author jammini
*/
public class AlreadyContestEndException extends BadRequestException {
public AlreadyContestEndException() {
super("이미 종료된 대회입니다.");
}
}
서비스를 모킹해서 예외를 던지도록 할 것이다.
@WebMvcTest(ContestInfoApi.class)
class ContestInfoApiTest extends WebMvcBase {
@MockBean
private ContestService contestService;
@Test
void alreadyContestEnd() throws Exception {
// when
// AlreadyContestEndException.class
when(contestService.modify(anyLong(), any())).thenThrow(AlreadyContestEndException.class);
// ...
}
}
@ControllerAdvice 를 이용해 예외 클래스 안의 message 속성을 사용할 경우!
/**
* 웹 예외 핸들러<br>
* 시스템상에 발생하는 예외를 잡아서 공통으로 처리한다.
*
* @author antop
*/
@Slf4j
@RestControllerAdvice
public class ErrorAdvisor {
/**
* 400 Bad Request 예외 처리
*/
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(BadRequestException.class)
ErrorMessage badRequest(Exception e) {
log.debug("message = {}", e.getMessage());
return ErrorMessage.badRequest(e.getMessage());
}
}
message는 null이 출력되게 된다. thenThrow() 인자로 new Exception() 을 사용하자.
when(contestService.modify(anyLong(), any())).thenThrow(new AlreadyContestEndException());
'Framework > Spring' 카테고리의 다른 글
Spring + @Lazy (0) | 2019.08.05 |
---|---|
Twelve Best Practices For Spring XML Configurations (0) | 2010.06.23 |