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 に設定する。

すると、シードが検出された場合にテストスイートが失敗する。


参照