Mockito MatchersとHamcrest Matchersは、両方ともテストアサーションを作成するためにJavaで使用されますが、さまざまな目的を果たし、明確な特性を持っています。
mockitoマッチャー
模擬マッチャーは、主にモックオブジェクトを操作するときに期待または検証を設定するために使用されます。これらのマッチャーは、一致するオブジェクトのタイプを返します。これにより、モックオブジェクトのメソッド呼び出しの引数として直接使用できます。たとえば、 `org.mockito.matchers.any(integer.class)` `integer`を返し、` when(mockfoo.getbarbyindex(any(integer.class))) `[1]などのメソッドスタブまたは検証での使用に適しています。
Mockito Matchersは、MockitoのMockingフレームワークでシームレスに動作するように設計されており、モックオブジェクトのメソッド呼び出しに対する柔軟な期待を定義できるようになります。ただし、通常、「assertthat」ステートメントでは使用されません。これらは、より一般的にHamcrestに関連付けられています。
Hamcrestマッチャー
一方、Hamcrestマッチャーは、テストの条件を主張するための「アサートThat」ステートメントで使用されるように設計されています。彼らは「マッチャー」オブジェクトを返します。これは、条件が満たされるかどうかを評価するために使用できる述語です。 Hamcrestマッチャーは非常に柔軟であり、「Allof」、「Anyof」、「Not」などの論理演算子を使用して組み合わせることができます[2] [3]。
Hamcrestマッチャーは、Junitおよびその他のテストフレームワークと組み合わせて広く使用されており、明確で読みやすいテストアサーションを記述しています。彼らは、テストコードをより自己文書化し、理解しやすくする流fluent APIを提供します。たとえば、「assertthatthat( "hello"、equto( "hello"))」は、アサーションの意図を明確に伝えます[7]。
MockitoとHamcrestの統合
モッキートマッチャーを必要とするコンテキストでハムクレストマッチャーを使用する場合(たとえば、メソッドコールのスタブまたは検証)、モッキートは「thatthat」メソッドを提供します。この方法を使用すると、Hamcrestマッチャーをラップして、Mockito Matcherとして使用できます。たとえば、 `(mockfoo.getbarbydouble(argthat(closeto(1.0、0.001)))))`は、Hamcrestマッチャーを使用して、ある程度の精度で二重値の条件を指定します[1] [5]。
Mockito 2以降では、Hamcrestとの統合は、「Mockitohamcrest」クラスを介して処理されます。これは、Hamcrestマッチャーで動作するように特別に設計された「the argthat」メソッドを提供します[5] [10]。このデカップリングは、MockitoとHamcrestライブラリ間のバージョンの競合を回避するのに役立ちます。
要約すると、模擬マッチャーは主にモッキングやスタブに使用されますが、ハムクレストマッチャーはアサーションに使用されます。どちらも、「argthat」メソッドを活用してHamcrestマッチャーをモッキートのモッキングフレームワークに統合することにより、テストで効果的に使用できます。
引用:[1] https://stackoverflow.com/questions/8348046/mockitos-matcher-vs-hamcrest-matcher
[2] https://www.javacodegeeks.com/2015/11/hamcrest-matchers-tutorial.html
[3] https://www.vogella.com/tutorials/hamcrest/article.html
[4] https://support.intershop.com/kb/go.php/a/enfdevdoc/pages/1827636063/guide +- +7.10+ migration +1+to+ mockito+2
[5] https://site.mockito.org/javadoc/current/org/mockito/hamcrest/mockitohamcrest.html
[6] https://www.baeldung.com/hamcrest-text-matchers
[7] https://automatenow.io/complete-guide-to-hamcrest-matchers/
[8] https://www.scalatest.org/scaladoc/3.0.7/org/scalatest/matchers.html
[9] https://hamcrest.org/javahamcrest/tutorial
[10] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.hamcrest.mockitohamcrest.argthat