본문 바로가기
Spring Study

JUnit 단위 테스트 라이프사이클

by xogns93 2024. 8. 7.

JUnit 단위 테스트의 라이프사이클은 테스트 메서드가 실행되기 전후에 수행되는 여러 단계로 구성됩니다. JUnit 5를 기준으로 단위 테스트의 라이프사이클을 설명하겠습니다. JUnit 5는 이전 버전인 JUnit 4와 비교하여 더 많은 기능과 유연성을 제공합니다.

JUnit 단위 테스트 라이프사이클

  1. 테스트 클래스 초기화 (@BeforeAll)
  2. 각 테스트 메서드 실행 전 초기화 (@BeforeEach)
  3. 테스트 메서드 실행 (@Test)
  4. 각 테스트 메서드 실행 후 정리 (@AfterEach)
  5. 테스트 클래스 종료 (@AfterAll)

이러한 라이프사이클 메서드는 테스트 클래스 및 메서드의 실행 순서와 상태 관리를 돕습니다.

어노테이션 설명

  • @BeforeAll: 모든 테스트 메서드가 실행되기 전에 한 번 실행됩니다. 이 메서드는 static으로 선언해야 합니다.
  • @BeforeEach: 각 테스트 메서드가 실행되기 전에 실행됩니다.
  • @AfterEach: 각 테스트 메서드가 실행된 후에 실행됩니다.
  • @AfterAll: 모든 테스트 메서드가 실행된 후에 한 번 실행됩니다. 이 메서드는 static으로 선언해야 합니다.
  • @Test: 실제 테스트 메서드를 나타냅니다. 각 테스트 메서드는 독립적으로 실행됩니다.
  • @DisplayName: 테스트 클래스나 테스트 메서드에 사용자 정의 이름을 제공합니다.
  • @Disabled: 특정 테스트 클래스나 메서드를 비활성화합니다.

예제 코드

다음은 JUnit 5에서 단위 테스트 라이프사이클을 설명하는 예제 코드입니다.

import org.junit.jupiter.api.*;

public class LifecycleTest {

    @BeforeAll
    static void initAll() {
        System.out.println("Before All Tests");
    }

    @BeforeEach
    void init() {
        System.out.println("Before Each Test");
    }

    @Test
    @DisplayName("Test 1")
    void test1() {
        System.out.println("Executing Test 1");
        Assertions.assertEquals(2, 1 + 1);
    }

    @Test
    @DisplayName("Test 2")
    void test2() {
        System.out.println("Executing Test 2");
        Assertions.assertTrue(3 > 2);
    }

    @AfterEach
    void tearDown() {
        System.out.println("After Each Test");
    }

    @AfterAll
    static void tearDownAll() {
        System.out.println("After All Tests");
    }
}

출력 예시

Before All Tests
Before Each Test
Executing Test 1
After Each Test
Before Each Test
Executing Test 2
After Each Test
After All Tests

설명

  1. @BeforeAll: initAll() 메서드는 테스트 클래스 내의 모든 테스트 메서드가 실행되기 전에 딱 한 번 호출됩니다. 주로 테스트에 필요한 전역 설정이나 초기화를 수행하는 데 사용됩니다.
  2. @BeforeEach: init() 메서드는 각 테스트 메서드가 실행되기 전에 호출됩니다. 테스트 메서드마다 독립적인 설정이 필요한 경우에 사용됩니다.
  3. @Test: test1()test2() 메서드는 실제 테스트 코드입니다. 각 테스트는 독립적으로 실행되며, 서로 영향을 미치지 않습니다.
  4. @AfterEach: tearDown() 메서드는 각 테스트 메서드가 실행된 후에 호출됩니다. 테스트 메서드에서 사용된 리소스를 정리하거나 후속 작업을 수행하는 데 사용됩니다.
  5. @AfterAll: tearDownAll() 메서드는 모든 테스트 메서드가 실행된 후에 딱 한 번 호출됩니다. 주로 전역 리소스를 해제하거나 후속 작업을 수행하는 데 사용됩니다.

결론

JUnit 단위 테스트의 라이프사이클은 테스트 실행 전후에 특정 작업을 수행할 수 있도록 다양한 어노테이션을 제공합니다. 이를 통해 테스트 클래스와 메서드의 상태를 관리하고, 초기화 및 정리 작업을 효과적으로 수행할 수 있습니다. JUnit 5는 이러한 라이프사이클 메서드를 통해 테스트를 보다 유연하고 강력하게 작성할 수 있도록 지원합니다.