KOTLIN · 테스트
프로퍼티 기반 테스트 (Property-Based)
무작위 입력으로 속성(불변식)을 검증하는 프로퍼티 기반 테스트입니다. 엣지 케이스를 자동으로 발견합니다.
테스트고급property-basedrandom-testinginvariantkotest
핵심 설명
무작위 입력으로 속성(불변식)을 검증하는 프로퍼티 기반 테스트입니다. 엣지 케이스를 자동으로 발견합니다.
Kotlin code
import kotlin.random.Random
// 프로퍼티 테스트 프레임워크 (간략 구현)
fun <T> forAll(
iterations: Int = 100,
generator: () -> T,
property: (T) -> Boolean
) {
repeat(iterations) { i ->
val input = generator()
if (!property(input)) {
throw AssertionError("반례 발견! 입력: $input (반복 #$i)")
}
}
}
// 테스트 대상
fun reverse(list: List<Int>): List<Int> = list.reversed()
fun sort(list: List<Int>): List<Int> = list.sorted()
fun main() {
// 속성 1: 두 번 reverse하면 원본
forAll(
generator = { List(Random.nextInt(0, 20)) { Random.nextInt(-100, 100) } },
property = { list -> reverse(reverse(list)) == list }
)
println("✓ reverse(reverse(x)) == x")
// 속성 2: 정렬 후 크기 동일
forAll(
generator = { List(Random.nextInt(0, 50)) { Random.nextInt() } },
property = { list -> sort(list).size == list.size }
)
println("✓ sort(x).size == x.size")
// 속성 3: 정렬된 리스트는 순서 유지
forAll(
generator = { List(Random.nextInt(1, 30)) { Random.nextInt(-50, 50) } },
property = { list ->
val sorted = sort(list)
sorted.zipWithNext().all { (a, b) -> a <= b }
}
)
println("✓ sort(x)는 오름차순")
println("모든 프로퍼티 테스트 통과!")
}학습 팁
Kotest의 property testing 모듈이나 jqwik을 사용하면 shrinking(최소 반례 찾기) 기능도 제공됩니다.
주의할 점
프로퍼티 테스트의 generator가 엣지 케이스(빈 리스트, 극값 등)를 포함하도록 설계하세요. 균일 분포만으로는 부족합니다.
자주 묻는 질문
프로퍼티 기반 테스트 (Property-Based)란 무엇인가요?
무작위 입력으로 속성(불변식)을 검증하는 프로퍼티 기반 테스트입니다. 엣지 케이스를 자동으로 발견합니다.
프로퍼티 기반 테스트 (Property-Based) 학습 시 주의할 점은 무엇인가요?
프로퍼티 테스트의 generator가 엣지 케이스(빈 리스트, 극값 등)를 포함하도록 설계하세요. 균일 분포만으로는 부족합니다.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.