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에서 테스트 케이스를 동적 생성할 수 있습니다.");
}
}학습 팁
@TestFactory는 Collection, Stream, Iterable, Iterator를 반환할 수 있습니다. 데이터 기반 테스트에 강력합니다.
주의할 점
@TestFactory 메서드는 @Test와 달리 @BeforeEach/@AfterEach가 동적 테스트 개별이 아닌 팩토리 메서드 단위로 실행됩니다.
자주 묻는 질문
@TestFactory와 동적 테스트란 무엇인가요?
런타임에 테스트를 동적으로 생성하는 @TestFactory 입니다.
@TestFactory와 동적 테스트 학습 시 주의할 점은 무엇인가요?
@TestFactory 메서드는 @Test 와 달리 @BeforeEach / @AfterEach 가 동적 테스트 개별이 아닌 팩토리 메서드 단위로 실행됩니다.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.