Kotest インスペクター(Inspectors)
Kotest は Matcher に加えて、Matcher に関連するインスペクターという概念をサポートする。インスペクターはコレクション関数の拡張関数で、指定したアサーションがコレクション要素のどのグループで成立するかを検証できる。
インスペクター
インスペクターは、コレクションや配列に対する拡張関数である。指定したアサーションが、特定の数またはグループの要素に対して真であるかを検証する。
たとえば、次のコードは xs のうち少なくとも 2 つの値が 0 より大きいことを検証する。
xs.forAtLeast(2) {
it shouldBeGreaterThan 0
}
次のコードは、xs のどの要素も 0 より大きくないことを検証する。
xs.forNone {
it shouldBeGreaterThan 0
}
Kotest には次のインスペクターが用意されている。
| Inspector | 説明 |
|---|---|
forAll |
すべての要素でアサーションが成功する必要がある。 |
forNone |
すべての要素でアサーションが失敗する必要がある。 |
forOne |
ちょうど 1 つの要素でアサーションが成功する必要がある。 |
forAtMostOne |
最大 1 つの要素でアサーションが成功する必要がある。 |
forAtLeastOne |
少なくとも 1 つの要素でアサーションが成功する必要がある。 |
forAtLeast(k) |
少なくとも k 個の要素でアサーションが成功する必要がある。 |
forAtMost(k) |
最大 k 個の要素でアサーションが成功する必要がある。 |
forAny |
forAtLeastOne の別名。 |
forSome |
少なくとも 1 つの要素で成功し、すべての要素では成功しない必要がある。 |
forExactly(k) |
ちょうど k 個の要素でアサーションが成功する必要がある。 |
例:
import io.kotest.core.spec.style.FunSpec
import io.kotest.inspectors.forAll
import io.kotest.inspectors.forAtLeast
import io.kotest.inspectors.forNone
import io.kotest.matchers.ints.shouldBeGreaterThan
class NumbersTestWithInspectors : FunSpec({
test("inspectors") {
val numbers = listOf(1, 2, 3, 4, 5)
numbers.forAll {
it shouldBeGreaterThan 0
}
numbers.forAtLeast(2) {
it shouldBeGreaterThan 3
}
numbers.forNone {
it shouldBeGreaterThan 10
}
}
})