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 に設定する。
すると、シードが検出された場合にテストスイートが失敗する。