PHpullh
학습 라이브러리/Java/@Nested 테스트

JAVA · 테스트

@Nested 테스트

중첩 클래스로 테스트를 계층적으로 구조화합니다.

테스트중급NestedBDD구조화테스트계층

핵심 설명

중첩 클래스로 테스트를 계층적으로 구조화합니다.

Java code

// import org.junit.jupiter.api.*;
// import static org.junit.jupiter.api.Assertions.*;

// @Nested 테스트 구조 (의사코드)
// @DisplayName("스택 테스트")
// class StackTest {
//     Stack<String> stack;
//
//     @BeforeEach
//     void createStack() { stack = new Stack<>(); }
//
//     @Test
//     @DisplayName("새 스택은 비어있다")
//     void isEmpty() { assertTrue(stack.isEmpty()); }
//
//     @Nested
//     @DisplayName("요소를 push한 후")
//     class AfterPush {
//         @BeforeEach
//         void pushElement() { stack.push("element"); }
//
//         @Test
//         @DisplayName("비어있지 않다")
//         void isNotEmpty() { assertFalse(stack.isEmpty()); }
//
//         @Test
//         @DisplayName("peek은 요소를 제거하지 않는다")
//         void peekDoesNotRemove() {
//             assertEquals("element", stack.peek());
//             assertFalse(stack.isEmpty());
//         }
//
//         @Nested
//         @DisplayName("pop한 후")
//         class AfterPop {
//             @BeforeEach
//             void popElement() { stack.pop(); }
//
//             @Test
//             @DisplayName("다시 비어있다")
//             void isEmpty() { assertTrue(stack.isEmpty()); }
//         }
//     }
// }

class Main {
    public static void main(String[] args) {
        System.out.println("@Nested는 Given-When-Then 구조를 자연스럽게 표현합니다.");
        System.out.println("외부 클래스의 @BeforeEach가 먼저 실행됩니다.");
    }
}

학습 팁

@Nested는 BDD의 Given-When-Then을 자연스럽게 표현합니다. 각 중첩 레벨이 추가 컨텍스트(Given)가 됩니다.

주의할 점

@Nested 클래스에서는 @BeforeAll/@AfterAll을 사용할 수 없습니다(기본 설정). @TestInstance(PER_CLASS)로 해결 가능합니다.

자주 묻는 질문

@Nested 테스트란 무엇인가요?

중첩 클래스로 테스트를 계층적으로 구조화합니다.

@Nested 테스트 학습 시 주의할 점은 무엇인가요?

@Nested 클래스에서는 @BeforeAll / @AfterAll 을 사용할 수 없습니다(기본 설정). @TestInstance(PER_CLASS) 로 해결 가능합니다.