Kotestテスト検証アサーション(Assertions)

テストでは、特定の条件が真であるかを確認するためにAssertionを使用する。KotlinではKotestを通じてさまざまな種類のAssertionとMatchersを活用できる。このセクションではAssertionとMatchersについて詳しく見ていく。

Kotestは、独立して使用できる複数のサブプロジェクトに分かれている。これらのサブプロジェクトの1つは、包括的なアサーション(assertion)/matcherサポートを提供する。これはKotestテストフレームワーク、またはJUnitやSpockのような他のテストフレームワークと一緒に使用できる。

アサーションモジュールの中核機能は、状態をテストする関数である。Kotestはこの種の状態アサーション関数をMatchersと呼ぶ。コアmatcherとサードパーティライブラリ向けmatcherがある。

例外テスト、非決定的コードのテストに役立つ関数、コレクション用のインスペクタ、アサーションをグループ化するソフトアサーションなど、テスト作成のための他の多くのユーティリティもある。

さまざまなmatcher

たとえば、変数に期待値があることを確認するには、shouldBe関数を使用できる。

name shouldBe "devkuma"

文字列の長さをテストするstr.shouldHaveLength(10)、特定のファイルがディレクトリを指しているかをテストするfile.shouldBeDirectory()のようなさまざまな特定シナリオ向けmatcherだけでなく、shouldBeのような汎用matcherもある。この関数はinfix形式と通常形式の両方で提供される。

たとえば、アサーションは通常チェーンできる。

"substring".shouldContain("str")
           .shouldBeLowerCase()

myImageFile.shouldHaveExtension(".jpg")
           .shouldStartWith("https")

複数のモジュールにわたって350以上のmatcherがある。すべてのmatcherについてはここで確認してほしい。

手がかり(Clues)

失敗したアサーションに、何が間違っているのかを正確に知るための十分な情報が含まれていない場合がある。

たとえば、次のように検証するとしよう。

user.name shouldNotBe null

この検証が失敗すると、単に次のように出力される。

<null> should not equal <null>

これは特に役立たない。手がかりを使用して、失敗メッセージに追加コンテキストを加えることができる。

インスペクタ(Inspectors)

インスペクタを使用すると、コレクションの要素をテストし、通過すると期待される要素数、all、none、exactly kなどを指定できる。

たとえば、次のようにmylistを3つ確認できる。

mylist.forExactly(3) {
    it.city shouldBe "Chicago"
}

ここでインスペクタについて確認してほしい。

カスタムmatcher

Matcher<T>インターフェースを拡張することで、自分だけのmatcherを簡単に追加できる。ここでTは一致させたい型である。カスタムmatcherは既存matcherを構成したり、完全に独立して使用したりできる。

完全な動作を参照すること。


参考

Assertions | Kotest