PHpullh
학습 라이브러리/Kotlin/테스트 픽스처 (Test Fixture)

KOTLIN · 테스트

테스트 픽스처 (Test Fixture)

테스트에 필요한 데이터와 환경을 체계적으로 설정하는 픽스처 패턴입니다.

테스트중급fixturetest-databuilderfactory-method

핵심 설명

테스트에 필요한 데이터와 환경을 체계적으로 설정하는 픽스처 패턴입니다.

Kotlin code

data class User(val id: String, val name: String, val email: String, val role: String = "USER")
data class Order(val id: String, val userId: String, val items: List<String>, val total: Int)

// 테스트 픽스처 빌더
object TestFixtures {
    fun user(
        id: String = "user-${(1000..9999).random()}",
        name: String = "테스트유저",
        email: String = "$id@test.com",
        role: String = "USER"
    ) = User(id, name, email, role)

    fun admin(name: String = "관리자") = user(name = name, role = "ADMIN")

    fun order(
        userId: String = "user-001",
        items: List<String> = listOf("상품A"),
        total: Int = items.size * 10000
    ) = Order("order-${(1000..9999).random()}", userId, items, total)

    // 대량 데이터 생성
    fun users(count: Int) = List(count) { user(id = "user-${it + 1}", name = "유저${it + 1}") }
}

fun main() {
    // 기본 픽스처
    val user = TestFixtures.user()
    println("기본 유저: $user")

    // 커스텀 픽스처
    val admin = TestFixtures.admin("슈퍼관리자")
    println("관리자: $admin")

    // 연관 데이터
    val testUser = TestFixtures.user(id = "u-001", name = "김철수")
    val testOrder = TestFixtures.order(userId = testUser.id, items = listOf("노트북", "마우스"))
    println("주문: $testOrder")

    // 대량 데이터
    val users = TestFixtures.users(5)
    users.forEach { println("  $it") }
}

학습 팁

픽스처 함수에 기본값을 제공하면 테스트마다 필요한 필드만 지정하면 됩니다. 테스트 의도가 명확해집니다.

주의할 점

픽스처 간 상태를 공유하면 테스트 순서에 의존하게 됩니다. 각 테스트마다 새 픽스처를 생성하세요.

자주 묻는 질문

테스트 픽스처 (Test Fixture)란 무엇인가요?

테스트에 필요한 데이터와 환경을 체계적으로 설정하는 픽스처 패턴입니다.

테스트 픽스처 (Test Fixture) 학습 시 주의할 점은 무엇인가요?

픽스처 간 상태를 공유하면 테스트 순서에 의존하게 됩니다. 각 테스트마다 새 픽스처를 생성하세요.