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
        }
    }
})

실패한 시드 다시 실행하기

기본적으로 속성 테스트가 실패하면 해당 테스트에 사용된 시드는 ~/.kotest/seeds/<spec>/<testname>에 있는 파일에 기록된다. 속성 테스트가 실행될 때마다 이 파일이 존재하는지 감지하여 임의의 시드 대신 이 시드를 사용한다. 다음에 테스트가 성공하면 시드 파일이 제거된다.

시드 설정 시 실패

일부 사용자는 수동으로 시드를 지정하지 않기를 원할 수 있다. 개발할 때 로컬에서만 사용하고 체크인은 하지 않기를 원할 수 있다. 그런 경우 서버에서 PropertyTesting.failOnSeed = false 또는 환경 변수 kotest.proptest.seed.fail-if-setfalse로 설정한다.

그러면 시드가 감지되면 테스트 스위트가 실패한다.


참조




최종 수정 : 2024-04-21