애플리케이션 컨트롤러 코드는 다음과 같을 수 있다
@PostMapping("/token")
public ResponseEntity<JsonResult<AuthenticationResponseDto>> generateJwtToken
(@RequestBody AuthenticationRequestDto authenticationRequestDto) {
//bla bla ...
if(!passwordEncoder.matches(authenticationRequestDto.getPassword(), user.getPassword())) {
throw new BadCredentialsException("Password not matched");
}
//bla bla ...
}
이 코드에서 throw new BadCredentialsException("Password not matched"); 를 발생시키면 mockmvc 테스트 도중 NestedServletException 이 발생한다. 때문에 테스트를 실패하는데 junit5에서 다음과 같은 방법으로 NestedServletException 내부에서 발생한 exception을 검사할 수 있도록 다음과 같은 메서드를 제공한다.
org.assertj.core.api.Assertions.assertThatThrownBy(
() -> mvc.perform(get("/api/scope")).andExpect(status().isOk()))
.hasCause(new AccessDeniedException("Access is denied"));
이런식으로 테스트하면 테스트를 통과할 수 있다.
'spring' 카테고리의 다른 글
[spring] spring.data.web.pageable.size-parameter not working (2) | 2021.07.21 |
---|---|
[jpa + junit] 슬라이스 테스트 도중 JPA metamodel must not be empty! 해결 (0) | 2020.09.01 |
[Spring cloud] Netflix Feign Client Mocking하기 (2) | 2020.08.21 |
[JPA] Console에 net::ERR_INVALID_CHUNKED_ENCODING 200 에러시 참고 (0) | 2020.05.15 |
[JUnit] Mockmvc를 사용한 Controller Test에서 @ControllerAdvice 테스트하기 (2) | 2019.10.31 |