模擬引数マッチャーは、模擬設定時に引数を柔軟に指定するために、単体テストで使用される強力なツールです。ただし、いくつかの制限があります。
1。使用法のコンテキスト:引数マッチャーは、スタブまたは検証方法のコンテキスト内でのみ使用できます。テスト中のオブジェクトでメソッドを呼び出す場合、それらを使用することはできません。たとえば、実際のオブジェクトでメソッドを呼び出すときに「anystring()」を使用することはできません。代わりに、具体的な値[1] [5]を使用する必要があります。
2。引数全体の一貫性:1つの引数に引数マッチャーを使用する場合、他のすべての引数もマッチャーを使用する必要があります。同じ方法呼び出しで、異なる引数のマッチャーを具体的な値と混ぜることはできません。これは、「InvaliduseofMatchersexception」[7] [8]の一般的なソースです。
3。モッキングの制限:モッキートは、 `equals()`、 `hashcode()`、または最終的な方法などの特定の方法を模倣できません。引数マッチャーは、ock笑できる方法で使用できますが、これらの制限された方法をock笑する能力を拡張しません[3]。
4。引数マッチャータイプ:Mockitoは、さまざまな内蔵引数マッチャー( `anyint()`、 `anystring()`、 `isnull()`)を提供しますが、引数の正しいタイプを選択する必要があります。たとえば、「any()」を使用すると、プリミティブタイプを使用すると、予想どおりに機能しない場合があります。代わりに、ブールパラメーターには「anyboolean()」のようなより具体的なマッチャーを使用します[7]。
5。カスタム引数マッチャー:モッキートでは、 `argthath()`メソッドを使用してカスタムマッチャーを作成できますが、「argumpsmatcher」インターフェイスを実装するには、異なるシナリオ[2] [4]でマッチャーが期待どおりに動作するように慎重に検討する必要があります。
6.他のライブラリとの統合:Hamcrestなどの他のライブラリとMockitoを使用する場合、統合が適切に処理されていることを確認してください。たとえば、Sonarqubeは、たとえ有効であっても[4]であっても、hamcrestマッチャーを正しくないと 'argththat() `の特定の用途にフラグを立てる可能性があります。
要約すると、Mockito引数マッチャーは多用途ですが、それらの使用法は特定のコンテキストに限定されており、メソッド引数全体で一貫性が必要です。さらに、特定の方法やクラスに関するモッキートの基本的な制限を克服しません。
引用:[1] https://groups.google.com/g/mockito/c/ul9ymczqnky
[2] https://kenkousen.substack.com/p/tales-from-the-jar-side-a-mockito
[3] https://ioflood.com/blog/mockito/
[4] https://community.sonarsource.com/t/problem-with-java-rule-s6073-mockito-argument-matchers-in-case-of-case-of-case-mockitohamcrest-adapter/38429
[5] https://groups.google.com/g/mockito/c/zi6pcqudtco
[6] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.argumentmatchers.isnull
[7] https://stackoverflow.com/questions/16458136/mockito-invalid-use-of-argument-matchers
[8] https://www.baeldung.com/mockito-argument-matchers