
@BeforeEach는 JUnit Jupiter(= JUnit 5)의 어노테이션으로, 각 테스트 메서드가 실행되기 바로 직전에 호출되는 초기화 메서드를 표시합니다. 주된 목적은 테스트 간에 공통으로 필요한 준비 작업(객체 초기화, 테스트 더미 데이터 설정, 목(mock) 초기화 등)을 반복해서 수행해 테스트들이 독립적으로 동작하게 만드는 것입니다. 핵심 사항 - 실행 시점: 각 @Test(또는 @ParameterizedTest, @RepeatedTest, dynamic test 등) 실행 직전에 호출됩니다. - 인스턴스/정적: @BeforeEach는 인스턴스 메서드로 사용됩니다(보통 static이면 안 됨). JUnit의 기본 테스트 인스턴스 라이프사이클은 "per-method"라서 각 테스트마다 새로운 테스트 클래스 인스턴스가 생성되고 @BeforeEach가 호출됩니다. - 예외 처리: @BeforeEach에서 예외가 발생하면 해당 테스트는 실행되지 않고 실패(또는 에러) 처리됩니다. - 상호 관계: 전체 클래스당 한 번만 실행되는 @BeforeAll과 대비됩니다(@BeforeAll은 모든 테스트 전에 한 번 실행). @BeforeAll은 보통 static이지만 TestInstance(Lifecycle.PER_CLASS)를 사용하면 non-static으로도 가능. - 상속/순서: 상위 클래스의 @BeforeEach는 하위 클래스의 @BeforeEach보다 먼저 실행됩니다. 같은 클래스 내에 여러 @BeforeEach가 있을 경우 호출 순서는 보장되지 않습니다. - 접근 제어자: JUnit 5에서는 public이 아니라도(심지어 private도) 사용할 수 있습니다. 간단한 예 (Java) import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; class MyTest { private List
list; @BeforeEach void setUp() { list = new ArrayList<>(); list.add("init"); } @Test void testOne() { assertEquals(1, list.size()); } } 요약하면, @BeforeEach는 각 테스트 실행 전 공통 초기화 코드를 모아두는 용도로 사용되어 테스트 독립성과 재현성을 높이는 역할을 합니다.