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

参照