Mockito引数マッチャーを広範囲に使用する場合、留意すべきパフォーマンスの考慮事項がいくつかあります。モキトは一般的に効率的ですが、引数マッチャーを広範囲に使用すると、モッキートがこれらのマッチャーを処理する方法により、オーバーヘッドを導入できます。
1。マッチャー処理オーバーヘッド**
- 引数マッチャー評価: `eq()`、 `any()`、または `anystring()`などの引数マッチャーを使用する場合、モキトは実行時にこれらのマッチャーを評価する必要があります。この評価プロセスは、正確な値を直接渡すことと比較して、わずかなオーバーヘッドを導入できます。ただし、このオーバーヘッドは、非常に多くの呼びかけまたは複雑なマッチャーを扱っていない限り、通常無視できます。2。マッチャーの組み合わせルール**
- すべての引数はマッチャーを使用する必要があります。1つの引数に対して引数マッチャーを使用する場合、すべての引数がマッチャーを使用する必要があります。このルールは、特定の条件が必要な場合にすべての引数にマッチャーを使用している場合、より冗長コードと潜在的により多くのオーバーヘッドにつながる可能性があります。たとえば、メソッドに3つのパラメーターがあり、そのうちの1つに「any()」を使用する場合、正確な値を使用できたとしても、他の2つにマッチャーも使用する必要があります。3。カスタムマッチャー**
- 複雑なロジック:Mockitoは幅広い内蔵マッチャーを提供していますが、特定のロジックのカスタムマッチャーを作成する必要がある場合があります。カスタムマッチャーは、複雑なロジックまたは操作を伴う場合、より計算的に高価になる可能性があります。これは、「argumpermatcher」インターフェイスを実装し、任意のチェックを実行できる「matches()」メソッドを定義する必要があるためです。4。確認オーバーヘッド**
- マッチャーによる検証: `verify()`を使用してモックオブジェクトとの相互作用を検証する場合、mockitoはマッチャーを使用して、正しい引数が渡されたかどうかを確認します。スタブと同様に、マッチャーによる検証は、特に複雑なマッチャーを使用して複数の呼び出しを検証している場合、オーバーヘッドを導入できます。5。パフォーマンスのベストプラクティス**
- 賢明に特異性を使用します。適切なレベルの特異性を持つマッチャーを使用します。たとえば、 `anyint()`は `eq(4)`よりも具体的ではなく速いですが、特定の値を確認する必要がある場合は、より正確であり、パフォーマンスに大きな影響を与えません。- 不必要な複雑さを避ける:必要でない限りカスタムマッチャーの使用を避けてください。テストで複雑なロジックが引数に一致する必要がある場合は、テストを簡素化するか、既存のマッチャーを創造的に使用することを検討してください。
- テストのプロファイル:テストでパフォーマンスの問題に気付いた場合は、ボトルネックを識別するためにプロファイルします。模擬マッチャーが重大なパフォーマンスの問題の主な原因となることはまれですが、検証することは常に良いことです。
要約すると、Mockito引数マッチャーはオーバーヘッドを導入しますが、非常に複雑なまたはパフォーマンスクリティカルなテストを扱っていない限り、これは一般に重要な懸念ではありません。テストコードの柔軟性や明確さなど、マッチャーを使用する利点は、通常、マイナーなパフォーマンスコストを上回ります。
引用:[1] https://stackoverflow.com/questions/56559146/junit-using-eq-argument-matcher-vs-passing-string-directly/56572275
[2] https://www.digitalocean.com/community/tutorials/mockito-argument-matchers-Any-eq
[3] https://kenkousen.substack.com/p/tales-from-the-jar-side-a-mockito
[4] https://www.softwaretestinghelp.com/mockito-matchers/
[5] https://www.toptal.com/java/a-guide-to-everyday-mockito
[6] https://github.com/etorreborre/specs2/issues/854
[7] https://www.lambdatest.com/automation-testing-advisor/selenium/classes/org.mockito.additionalMatchers
[8] https://stackoverflow.com/questions/73046134/when-should-iuse-argument-matcher-or-passing-argument-directly-when-mockito-uni