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는 이러한 라이프사이클 메서드를 통해 테스트를 보다 유연하고 강력하게 작성할 수 있도록 지원합니다.

+ Recent posts