본문 바로가기
IT/자바 스프링

Junit5 예외 test - assertThrows

by 노오-력 2023. 1. 18.
@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