Kotest コアマッチャー(Core Matchers)

Kotest のコアマッチャーの種類を紹介する。

kotest-assertions-core モジュールで提供されるマッチャーである。

General
obj.shouldBe(other) 指定した objother が等しいことを確認する。
expr.shouldBeTrue() 式が true であることを確認する。expr.shouldBe(true) と同じである。
expr.shouldBeFalse() 式が false であることを確認する。expr.shouldBe(false) と同じである。
shouldThrow<T> { block } ブロックが T または T のサブタイプをスローすることを確認する。
shouldThrowExactly<T> { block } ブロックが正確に T をスローすることを確認する。
shouldThrowAny { block } ブロックが任意の Throwable をスローすることを確認する。
shouldThrowMessage(message) { block } コードブロックが指定したメッセージを持つ Throwable を発生させることを確認する。
Types
obj.shouldBeSameInstanceAs(other) オブジェクトを同一参照で比較する。
obj.shouldBeTypeOf<T>() 参照が正確に型 T であることを確認する。サブクラスは失敗する。
obj.shouldBeInstanceOf<T>() 参照が型 T または T のサブクラスであることを確認する。
obj.shouldHaveAnnotation(annotationClass) オブジェクトに指定した型のアノテーションがあることを確認する。
obj.shouldBeNull() 参照が null であることを確認する。
Comparables
comp.shouldBeLessThan(other) compareTo を使って compother より小さいことを確認する。
comp.shouldBeLessThanOrEqualTo(other) compareTo を使って compother 以下であることを確認する。
comp.shouldBeEqualComparingTo(other) compareTo を使って compother と等しいことを確認する。
comp.shouldBeEqualComparingTo(other, comparator) comparator.compare を使って compother と等しいことを確認する。
comp.shouldBeGreaterThan(other) compareTo を使って compother より大きいことを確認する。
comp.shouldBeGreaterThanOrEqualTo(other) compareTo を使って compother 以上であることを確認する。
Iterator
iterator.shouldBeEmpty() イテレーターに次の値がないことを確認する。
iterator.shouldHaveNext() イテレーターに次の値があることを確認する。
Maps
map.shouldContain("key", "value") マップに "key" から "value" へのマッピングが含まれることを確認する。
map.shouldContainAll(other) マップが指定したマップのすべてのペアを含むことを確認する。
map.shouldContainExactly(other) マップが指定したマップのペアだけを正確に含み、余分な項目がないことを確認する。
map.shouldContainKey(key) マップに任意の値を持つ指定キーが含まれることを確認する。
map.shouldContainKeys(keys) マップに指定したすべてのキーのマッピングが含まれることを確認する。
map.shouldContainValue(value) マップに指定した値のマッピングが少なくとも 1 つ含まれることを確認する。
map.shouldContainValues(values) マップに指定した値がすべて含まれることを確認する。
map.shouldBeEmpty() マップが空であることを確認する。
map.shouldMatchAll("k1" to {it shouldBe "v1"}, "k2" to {it shouldBe "v2"}, ...) マップのすべての項目が指定したマッチャーに一致できることを検証する。余分なキーは無視される。
map.shouldMatchExactly("k1" to {it shouldBe "v1"}, "k2" to {it shouldBe "v2"}, ...) マップの項目が指定したマッチャーと正確に一致できることを確認する。
Strings
str.shouldBeBlank() 文字列が空、または空白のみであることを確認する。
str.shouldBeEmpty() 文字列の長さが 0 であることを確認する。
str.shouldBeLowerCase() 文字列がすべて小文字であることを確認する。
str.shouldBeUpperCase() 文字列がすべて大文字であることを確認する。
str.shouldContain("substr") 文字列に指定した部分文字列が含まれることを確認する。このマッチャーは大文字小文字を区別する。
str.shouldContain(regex) 文字列に指定した正規表現が含まれることを確認する。
str.shouldContainADigit() 文字列に少なくとも 1 つの数字が含まれることを確認する。
str.shouldContainIgnoringCase(substring) 大文字小文字を無視して、文字列に部分文字列が含まれることを確認する。
str.shouldContainOnlyDigits() 文字列が数字のみ、または空であることを確認する。
str.shouldBeInteger([radix]) 文字列に int が含まれることを確認し、それを返す。
str.shouldContainOnlyOnce(substring) 文字列に部分文字列がちょうど 1 回だけ含まれることを確認する。
str.shouldEndWith(suffix) 文字列が指定した接尾辞で終わることを確認する。
str.shouldHaveLength(length) 文字列が指定した長さであることを確認する。
str.shouldHaveLineCount(count) 文字列が指定した行数を持つことを確認する。
str.shouldHaveMaxLength(max) 文字列が指定した最大長より長くないことを確認する。
str.shouldHaveMinLength(min) 文字列が指定した最小長より短くないことを確認する。
str.shouldHaveSameLengthAs(anotherString) 文字列が別の文字列と同じ長さであることを確認する。
str.shouldMatch(regex) 文字列が指定した正規表現と完全に一致することを確認する。
str.shouldStartWith("prefix") 文字列が指定した接頭辞で始まることを確認する。
str.shouldBeEqualIgnoringCase(other) 大文字小文字を無視して、文字列が別の文字列と等しいことを確認する。
str.shouldBeTruthy() 文字列が truthy であることを確認する: true, yes, y, 1 のいずれか。
str.shouldBeFalsy() 文字列が falsy であることを確認する: false, no, n, 0 のいずれか。
Numbers
number.shouldBeBetween(x, y) 数値が xy の間にあり、両端を含むことを確認する。
number.shouldBeLessThan(n) 数値が n より小さいことを確認する。
number.shouldBeLessThanOrEqual(n) 数値が n 以下であることを確認する。
number.shouldBeGreaterThan(n) 数値が n より大きいことを確認する。
number.shouldBeGreaterThanOrEqual(n) 数値が n 以上であることを確認する。
number.shouldBeInRange(range) 数値が指定した範囲に含まれることを確認する。
number.shouldBeEven() 数値が偶数であることを確認する。
number.shouldBeOdd() 数値が奇数であることを確認する。
number.shouldBeZero() 数値が 0 であることを確認する。
double.shouldBe(value plusOrMinus(tolerance)) double が許容誤差の範囲内で指定した値と等しいことを確認する。
double.shouldBePositive() double が正数であることを確認する。
double.shouldBeNegative() double が負数であることを確認する。
double.shouldBePositiveInfinity() double が正の無限大であることを確認する。
double.shouldBeNegativeInfinity() double が負の無限大であることを確認する。
double.shouldBeNaN() double が NaN であることを確認する。
Files, URIs, and other modules
file.shouldBeAbsolute() ファイルが絶対パスを表すことを確認する。
file.shouldBeADirectory() ファイルがディレクトリを表すことを確認する。
file.shouldBeAFile() ファイルが通常ファイルを表すことを確認する。
file.shouldExist() ファイルがディスク上にディレクトリまたはファイルとして存在することを確認する。
file.shouldHaveExtension(ext) ファイルが指定した拡張子で終わることを確認する。
file.shouldHaveFileSize(size) ファイルが指定したサイズであることを確認する。
uri.shouldHaveAuthority(fragment) URI に指定した authority があることを確認する。
uri.shouldHaveFragment(fragment) URI に指定した fragment があることを確認する。
uri.shouldHaveHost(scheme) URI に指定した host があることを確認する。
uri.shouldHaveParameter(scheme) URI のクエリ文字列に指定したパラメータが含まれることを確認する。
uri.shouldHavePath(scheme) URI に指定した path があることを確認する。
uri.shouldHavePort(scheme) URI に指定した port があることを確認する。
uri.shouldHaveQuery(fragment) URI に指定した query があることを確認する。
uri.shouldHaveScheme(scheme) URI に指定した scheme があることを確認する。
Date and time
date.shouldHaveSameYearAs(otherDate) 日付が指定した日付と同じ年であることを確認する。
date.shouldHaveSameMonthAs(otherDate) 日付が指定した日付と同じ月であることを確認する。
date.shouldBeBefore(otherDate) 日付が指定した日付より前であることを確認する。
date.shouldBeAfter(otherDate) 日付が指定した日付より後であることを確認する。
date.shouldBeWithin(duration, otherDate) 日付が指定した日付から指定期間内にあることを確認する。
date.shouldBetween(firstDate, secondDate) 日付が 2 つの日付の間にあることを確認する。
zonedDateTime.shouldBeToday() ZonedDateTime が今日と同じ日であることを確認する。
offsetDateTime.shouldBeToday() OffsetDateTime が今日と同じ日であることを確認する。
time.shouldBeBefore(otherTime) 時刻が指定した時刻より前であることを確認する。
time.shouldBeAfter(otherTime) 時刻が指定した時刻より後であることを確認する。
time.shouldBeBetween(firstTime, secondTime) 時刻が 2 つの時刻の間にあることを確認する。
instant.shouldBeAfter(anotherInstant) インスタントが別のインスタントより後に発生することを確認する。
instant.shouldBeBefore(anotherInstant) インスタントが別のインスタントより前に発生することを確認する。
instant.shouldBeBetween(fromInstant, toInstant) インスタントが 2 つのインスタントの間にあることを確認する。
Concurrent, futures, and threads
shouldCompleteWithin(timeout, unit, function) 指定した関数が指定期間内に完了することを確認する。
shouldTimeout(timeout, unit, function) 指定した関数が指定期間内に完了しないことを確認する。
future.shouldBeCancelled() future がキャンセルされたことを確認する。
future.shouldBeCompleted() future が完了したことを確認する。
future.shouldBeCompletedExceptionally() future が例外で完了したことを確認する。
thread.shouldBeBlocked() スレッドが現在ブロックされていることを確認する。
thread.shouldBeDaemon() スレッドがデーモンスレッドであることを確認する。
thread.shouldBeAlive() スレッドが生存していることを確認する。
thread.shouldBeTerminating() スレッドが終了していることを確認する。
Throwables / Exceptions
throwable.shouldHaveMessage(message) Throwable のメッセージが指定したメッセージと等しいことを確認する。
throwable.shouldHaveCause() Throwable に原因があることを確認する。
throwable.shouldHaveCause { block } Throwable に原因があることを確認し、それをブロックに渡す。
throwable.shouldHaveCauseInstanceOf<T>() Throwable に原因があり、それが型 T またはそのサブタイプであることを確認する。
throwable.shouldHaveCauseOfType<T>() Throwable に原因があり、それが正確に型 T であることを確認する。
Result and Optional
result.shouldBeSuccess() 結果が成功であることを確認する。
result.shouldBeSuccess(value) 結果が成功で、値が指定したものと等しいことを確認する。
result.shouldBeSuccess(block) 結果が成功であると仮定し、結果値でブロックを実行する。
result.shouldBeFailure() 結果が失敗であることを確認する。
result.shouldBeFailureOfType<Type : Throwable>() 結果が失敗で、例外クラスが指定したものと同じであることを確認する。
result.shouldBeFailure(block) 結果が失敗であると仮定し、例外でブロックを実行する。
optional.shouldBePresent() Optional が存在することを確認する。
optional.shouldBePresent { value -> .. } Optional が存在することを確認し、その値でブロックを実行する。
optional.shouldBeEmpty() Optional が空であることを確認する。
Reflection, statistics, and resources
kclass.shouldHaveAnnotations() クラスにアノテーションがあることを確認する。
kclass.shouldBeAnnotatedWith<T>() クラスが指定した型でアノテーションされていることを確認する。
kclass.shouldHaveFunction(name) クラスに指定した名前の関数があることを確認する。
kclass.shouldHaveMemberProperty(name) クラスに指定した名前のメンバープロパティがあることを確認する。
kclass.shouldBeData() クラスがデータクラスであることを確認する。
kclass.shouldBeSealed() クラスが sealed クラスであることを確認する。
kfunction.shouldHaveReturnType<T>() 関数が指定した型を返すことを確認する。
kproperty.shouldBeOfType<T>() プロパティが指定した型であることを確認する。
collection.shouldHaveMean(mean) コレクションが指定した平均を持つことを確認する。
collection.shouldHaveVariance(mean) コレクションが指定した分散を持つことを確認する。
collection.shouldHaveStandardDeviation(mean) コレクションが指定した標準偏差を持つことを確認する。
regex.shouldBeRegex(anotherRegex) パターンとオプションを比較し、正規表現が別の正規表現と等しいことを確認する。
regex.shouldHavePattern(regexPattern) 正規表現が指定したパターンを持つことを確認する。
any.shouldBeEqualToUsingFields(other: T, vararg properties: KProperty<*>) 指定したプロパティのみを考慮して other と等しいことを確認する。
any.shouldBeEqualToIgnoringFields(other: T, vararg properties: KProperty<*>) 指定したプロパティを無視して other と等しいことを確認する。
str shouldMatchResource "/path/to/test_resource.txt" 文字列が指定したリソースと等しいことを確認する。行区切りの違いは無視される。
byteArray shouldMatchResource "/path/to/test_resource.bin" byteArray が指定したリソースと等しいことを確認する。

参照