@Test
void exceptionTest() {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
MemberService memberServiceImpl = ac.getBean("memberServiceImpl", MemberService.class);
assertThat(memberServiceImpl).isInstanceOf(MemberService.class);
}
AppConfig.class로 컨테이너에 등록된 스프링 빈 중에서
MemberService 클래스에 속하는 "memberServiceImpl" 이라는 이름의 빈을 조회해서
조회한 빈이 MemberService 클래스에 속하는지(isInstanceOf) 확인하는 테스트이다.
그러나 테스트를 위해 "memberServiceImpl"라는 존재하지않는 빈 이름을 넣었다.
그래서 테스트를 실행해 보면
getBean() 메서드에서 NoSuchBeanDefinitionException 빈을 찾을 수 없다는 예외가 터진다.
그러므로 위 코드대로 실행하면 예외발생으로 인해 테스트는 실패한다.
그럼 특정 로직에서 예외가 발생하는것을 확인하는 테스트는 어떻게 하면 될까?
아래와 같이 코드를 변경해보자.
@Test
void exceptionTest() {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
Assertions.assertThrows(NoSuchBeanDefinitionException.class,
() -> ac.getBean("memberServiceImpl", MemberService.class));
}
Assertions.assertThrows( 발생해야할 예외클래스 , () → 테스트할 코드 );
:: Assertions는 org.junit.jupiter.api.Assertions를 사용
테스트할 코드가 실행 중 발생해야할 예외가 터지면 테스트는 성공한다.
위 예시에서는
ac.getBean("memberServiceImpl", MemberService.class) 코드 실행 중
유도한대로 NoSuchBeanDefinitionException 예외가 발생했기 때문에 테스트가 성공한다.
'IT > 자바 스프링' 카테고리의 다른 글
좋은 객체 지향 설계의 5가지 원칙(SOLID) (0) | 2023.01.17 |
---|