테스트 실패 코드 (Feat. assertThrows 메소드)

myeonji·2022년 3월 5일
0

Spring

목록 보기
20/22

🎈 assertThrows 메소드

assertThrows 메소드는 발생이 예상되는 예외의 타입, 예외가 발생될 수 있는 코드 블록을 파라미터로 받아서 실행된다.

이 때, assertThrows 내부에서는 예외가 발생될 수 있는 코드 블록을 실행한다.

만약 해당 코드 블록을 실행하는 중에 예외가 발생한다면 발생된 예외가 발생이 예상되는 예외의 타입과 일치하는지 아닌지를 확인한다.

발생된 예외 타입예상되는 예외 타입이 일치하면 테스트는 성공이다.

< assertThrows 메소드 내부 동작 >

위 사진을 보면,
try 블록 안에서 코드를 실행하여 예외 발생시 catch 내에서 발생한 예외 타입과 예상되는 예외 타입을 비교하고 있는 것을 볼 수 있다.


테스트 실패 코드를 작성하여 예외 처리 해보기!

스프링 컨테이너에서 xxxxx라는 이름을 가진 빈을 조회하였는데, 이러한 빈은 없다!
따라서 NoSuchBeanDefinitionException 예외가 발생하였다.

org.junit.jupiter.api.Assertions.assertThrows(NoSuchBeanDefinitionException.class, () -> ac.getBean("xxxxx", MemberService.class));

위처럼 junit의 Assertions를 사용해야 한다. 너무 길기 때문에.. static import를 하면(Alt + Enter)

import static org.junit.jupiter.api.Assertions.*; 이렇게 static import 된다!

💻 코드를 뜯어서 설명해보면..

존재하지 않는 빈의 이름으로 빈을 가져오려고 할 때 예외가 발생되는 상황을 테스트 하기 위한 메소드이다.

파라미터(발생이 예상되는 예외의 타입, 예외가 발생될 수 있는 코드 블록) 인 것이다!

즉, assertThrows(NoSuchBeanDefinitionException.class, () -> ac.getBean("xxxxx", MemberService.class)); 이렇게 쓸 수 있다.

() -> ac.getBean("xxxxx", MemberService.class) 를 실행 후 예외가 발생한다면 NoSuchBeanDefinitionException.class의 예외 타입과 일치하는지 확인하여 맞다면 테스트 성공이다~!

0개의 댓글