Mockitoを使用すると、Hamcrestは表現力豊かなマッチャーに使用されることがよくあり、テストの読みやすさが向上します。ただし、モキトでうまく機能する選択肢があり、それぞれに独自の長所と短所があります。
assertj
AssertJは、単体テストでアサーションを書くためのHamcrestの一般的な代替手段です。多くの開発者がHamcrestよりも使いやすく表現力豊かであると感じる流fluent APIを提供します。 AssertJの構文は、その読みやすさとカスタムアサーションを簡単に作成する能力に対して好まれることがよくあります。 AssertJはHamcrestのようにMockitoと直接統合されていませんが、AssertionsのためにMockitoと並んで使用でき、テストをより読みやすく保守しやすくします。ただし、AssertJは、主にHamcrestのより広範なマッチング機能ではなく、主にアサーションに焦点を当てています[1] [3]。
###真実
真実は、Googleが開発した別のアサーションライブラリです。 AssertJと同様のFluent APIを提供しますが、IDESでのより良い自動完了サポートの提供に重点を置いています。これは、利用可能なアサーションを発見するのに有益です。真実は、HamcrestほどMockitoで一般的に使用されていませんが、テストのアサーションに使用できます。 Assertjのように、真実は、Hamcrestが提供する一般的な一致するものではなく、より焦点を合わせています[3]。
Mockitoの組み込みマッチャー
Mockito自体は、モックオブジェクトとの相互作用をスタブおよび検証するために使用できるマッチャーを提供します。これらのマッチャーは、一致しているタイプを返します(例えば、「integer.class) `` integer`を返します)。これは、「マッチャー」を返すハムクレストマッチャーとは異なります。 Hamcrest MatchersをMockitoで使用するには、「Argthath」または「Mockitohamcrest.Argthat」を使用して、HamcrestマッチャーをMockito互換フォームに変換できます[7]。
###カスタム実装
外部ライブラリを使用したくないシナリオの場合、独自のマッチャーまたはアサーションを実装できます。このアプローチにより、動作と構文を完全に制御できますが、より多くの労力とメンテナンスが必要です。通常、既存のライブラリで満たされない非常に具体的なニーズがない限り、それは推奨されません。
### 結論
Hamcrestは、その柔軟性と表現力のためにMockitoで広く使用されていますが、AssertJやTruthなどの代替案はテストのアサート部分を強化することができます。 Mockitoと一致する目的で統合するものを探している場合、Hamcrestは引き続き強力な選択肢ですが、より包括的なテストエクスペリエンスのために他のアサーションライブラリと一緒にマッチャーを使用できます。最終的に、選択は、読みやすさ、使いやすさ、テストで実行するために必要なアサーションまたは一致の種類に関する特定のニーズと好みに依存します。
引用:[1] https://www.reddit.com/r//java/comments/nj7dvd/who_here_are_using_the_hamcrest_api_and_why/
[2] https://www.javacodegeeks.com/2015/11/hamcrest-matchers-tutorial.html
[3] https://truth.dev/comparison.html
[4] https://www.reddit.com/r//javahelp/comments/oqz8cn/unit_testing_with_mockito_framework_why_do_we/
[5] https://www.infoworld.com/article/2257253/junit-5-tutorial-part-1-unit-testing-with-junit-5-mockito-and-hamcrest.html
[6] https://softwareengineering.stackexchange.com/questions/447953/alternatives-to-using-mock-libraries-such-as-mockito-in-unit-testing
[7] https://stackoverflow.com/questions/8348046/mockitos-matcher-vs-hamcrest-matcher
[8] https://stackoverflow.com/questions/12606196/what-is-the-alternative-the-deprecated-hamcrest-method-is