Kotest 시드(Seeds)
속성 테스트를 실행하면 시드 값에서 생성된 임의 소스를 사용하여 값이 생성된다.
속성 테스트 시드
속성 테스트가 실행될 때 값은 시드(Seed) 값에서 생성된 임의의 소스를 사용하여 생성된다. 기본적으로 이 시드 값은 임의로 선택된다(기본 kotlin.random.Random
인스턴스 사용). 그러나 이 값을 고정하거나 반복해야 하는 경우가 있다.
아래 나열된 옵션을 통해 재정의하지 않는 한 모든 테스트에서 사용되는 기본값을 변경하려면 구성 값 PropertyTesting.defaultSeed
를 변경하면 된다.
수동으로 시드 지정하기
시드를 수동으로 설정하려면 PropTestConfig
의 인스턴스를 소품 테스트 메서드에 전달한다. 테스트 실패를 발견하고 해당 값이 향후 회귀 테스트로 계속 실행되도록 하려는 경우 이 작업을 수행할 수 있다.
예를 들어:
import io.kotest.core.spec.style.StringSpec
import io.kotest.property.PropTestConfig
import io.kotest.property.forAll
class PropertyExample : StringSpec({
"String size" {
forAll<String, String>(PropTestConfig(seed = 127305235)) { a, b ->
(a + b).length == a.length + b.length
}
}
})
TIP
속성 테스트가 실패할 때마다 Kotest는 사용된 시드를 출력한다. 테스트를 복제하여 이 시드를 사용하도록 설정하여 해당 값에 대한 영구적인 회귀 테스트를 수행할 수 있다.실패한 시드 다시 실행하기
기본적으로 속성 테스트가 실패하면 해당 테스트에 사용된 시드는 ~/.kotest/seeds/<spec>/<testname>
에 있는 파일에 기록된다. 속성 테스트가 실행될 때마다 이 파일이 존재하는지 감지하여 임의의 시드 대신 이 시드를 사용한다. 다음에 테스트가 성공하면 시드 파일이 제거된다.
NOTE
수동으로 지정한 시드는 항상 실패한 시드보다 우선한다.TIP
이 기능은PropertyTesting.writeFailedSeed = false
로 설정하여 비활성화할 수 있다.
시드 설정 시 실패
일부 사용자는 수동으로 시드를 지정하지 않기를 원할 수 있다. 개발할 때 로컬에서만 사용하고 체크인은 하지 않기를 원할 수 있다. 그런 경우 서버에서 PropertyTesting.failOnSeed = false
또는 환경 변수 kotest.proptest.seed.fail-if-set
을 false
로 설정한다.
그러면 시드가 감지되면 테스트 스위트가 실패한다.
참조
최종 수정 : 2024-04-21