PHpullh
학습 라이브러리/Java/@TestFactory와 동적 테스트

JAVA · 테스트

@TestFactory와 동적 테스트

런타임에 테스트를 동적으로 생성하는 @TestFactory입니다.

테스트중급TestFactoryDynamicTest동적테스트데이터기반

핵심 설명

런타임에 테스트를 동적으로 생성하는 @TestFactory입니다.

Java code

// import org.junit.jupiter.api.*;
// import java.util.*;
// import java.util.stream.*;

// @TestFactory 동적 테스트 (의사코드)
// class DynamicTestDemo {
//
//     @TestFactory
//     @DisplayName("동적 테스트 — 팩토리")
//     Collection<DynamicTest> dynamicTests() {
//         return List.of(
//             DynamicTest.dynamicTest("1 + 1 = 2",
//                 () -> assertEquals(2, 1 + 1)),
//             DynamicTest.dynamicTest("2 * 3 = 6",
//                 () -> assertEquals(6, 2 * 3))
//         );
//     }
//
//     @TestFactory
//     @DisplayName("스트림 기반 동적 테스트")
//     Stream<DynamicTest> streamTests() {
//         return Stream.of("racecar", "level", "kayak")
//             .map(word -> DynamicTest.dynamicTest(
//                 word + "은 회문이다",
//                 () -> {
//                     String reversed = new StringBuilder(word).reverse().toString();
//                     assertEquals(word, reversed);
//                 }
//             ));
//     }
//
//     @TestFactory
//     @DisplayName("중첩 동적 컨테이너")
//     Stream<DynamicNode> dynamicContainers() {
//         return Stream.of("Math", "String")
//             .map(category -> DynamicContainer.dynamicContainer(
//                 category,
//                 Stream.of(
//                     DynamicTest.dynamicTest("테스트1", () -> assertTrue(true)),
//                     DynamicTest.dynamicTest("테스트2", () -> assertNotNull(category))
//                 )
//             ));
//     }
// }

class Main {
    public static void main(String[] args) {
        System.out.println("@TestFactory는 데이터 기반 테스트에 적합합니다.");
        System.out.println("외부 파일, DB, API에서 테스트 케이스를 동적 생성할 수 있습니다.");
    }
}

학습 팁

@TestFactoryCollection, Stream, Iterable, Iterator를 반환할 수 있습니다. 데이터 기반 테스트에 강력합니다.

주의할 점

@TestFactory 메서드는 @Test와 달리 @BeforeEach/@AfterEach가 동적 테스트 개별이 아닌 팩토리 메서드 단위로 실행됩니다.

자주 묻는 질문

@TestFactory와 동적 테스트란 무엇인가요?

런타임에 테스트를 동적으로 생성하는 @TestFactory 입니다.

@TestFactory와 동적 테스트 학습 시 주의할 점은 무엇인가요?

@TestFactory 메서드는 @Test 와 달리 @BeforeEach / @AfterEach 가 동적 테스트 개별이 아닌 팩토리 메서드 단위로 실행됩니다.

Continue Learning

Java 학습을 이어가세요

총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.