Spring Boot/testing

JUnit 생명 주기 메소드

최-코드 2024. 11. 8. 22:57

필요성 : 테스트를 개발할 때는 일반적으로 각 테스트 전에 객체를 생성하고 테스트 데이터를 설정하거나, 각 테스트 후에 리소스를 해제하고 데이터를 정리하는 등의 공통 작업을 수행해야 할 때가 있는데, 이를 위해 간편하게 하기 위해 JUnit에서 생명 주기 메소드를 사용한다.

 

@BeforeEach : 각 테스트 메소드가 실행되기 전에 호출된다. 주로 객체 생성이나 테스트 데이터 설정과 같은 공통적인 초기화 작업에 유용하다.

 

@AfterEach : 각 테스트 메소드가 실행된 후에 호출된다. 주로 리소르를 해체하거나 테스트 데이터를 정리하는 공통 작업에 유용하다.

 

참고사항 : 여러 개의 테스트 메소드를 실행할 때 각 테스트 메소드가 실행되기 전에 한 번, 실행되고 나서 한 번 동작한다. 즉, n개의 테스트 메소드가 있으면 각각 n번 동작한다.

 

class DemoUtilsTest {

    DemoUtils demoUtils;

    @BeforeEach
    void setUp() {
        //set up
        demoUtils = new DemoUtils();
    }

    @Test
    void add() {
        //execute
        int actual = demoUtils.add(2, 4);

        //assert
        Assertions.assertEquals(6, actual, "2+4 must be 6");
        Assertions.assertNotEquals(7, actual, "2+4 must not be 7");
    }

 

추가 생명주기 메소드

  • @BeforeAll : 모든 테스트 메소드가 실행되기 전에 단 한 번 실행된다. 데이터베이스 연결 설정과 같은 작업에 유용하다.
  • @AfterAll : 모든 테스트 메소드가 실행되고 나서 단 한 번 실행된다. 데이터베이스 연결 해제나 서버 연결 해제와 같은 작업에 유용하다.
  • 위의 두 어노테이션이 붙은 메소드는 무조건 static 키워드가 붙어야 한다.

 

cf) @BeforeEach와 @BeforeAll 중 테스트 독립성을 위해서 @BeforeEach를 사용하는 것이 좋다.
     독립성과 관련 없는 것들만 @BeforeAll을 사용하자.