Wenn Mockito -Argumenten -Matcher ausgiebig verwendet werden, müssen einige Leistungsüberlegungen berücksichtigt werden. Während Mockito im Allgemeinen effizient ist, kann die umfangreiche Verwendung von Argument -Matchern aufgrund der Art und Weise, wie Mockito diese Matcher verarbeitet, etwas Overhead einführen.
1. Match -Verarbeitung Overhead **
- Argument -Matcher -Bewertung: Wenn Sie Argument -Matcher wie `EQ ()`, `Any ()` oder `modalstring ()`, muss Mockito diese Matcher zur Laufzeit bewerten. Dieser Bewertungsprozess kann einen leichten Overhead im Vergleich zu den exakten Werten direkt einführen. Dieser Overhead ist jedoch in der Regel vernachlässigbar, es sei denn, Sie haben es mit einer sehr großen Anzahl von Aufrufe oder komplexen Streichern zu tun.2. Matcher -Kombination Regeln **
- Alle Argumente müssen Matcher verwenden: Wenn Sie einen Argument -Match für ein Argument verwenden, müssen alle Argumente Matcher verwenden. Diese Regel kann zu mehr ausführlicheren Code und möglicherweise mehr Gemeinkosten führen, wenn Sie Matcher für alle Argumente verwenden, wenn nur einer eine bestimmte Bedingung benötigt. Wenn beispielsweise eine Methode drei Parameter enthält und Sie für einen von ihnen `beliebig () verwenden möchten, müssen Sie auch für die anderen beiden Matcher verwenden, auch wenn Sie genaue Werte hätten verwenden können.3. Custom Matcher **
- Komplexe Logik: Während Mockito eine breite Palette von integrierten Spielern bietet, müssen Sie möglicherweise benutzerdefinierte Matcher für eine bestimmte Logik erstellen. Benutzerdefinierte Matcher können rechenintensiver sein, wenn sie komplexe Logik oder Vorgänge beinhalten. Dies liegt daran, dass sie die Implementierung der Schnittstelle "ArgumentMatcher" und das Definieren einer "Matches ()` -Methode definieren müssen, die willkürliche Überprüfungen durchführen kann.4. Überheehe **
- Überprüfung mit Matchern: Bei Überprüfung der Interaktionen mit Scheinobjekten mit `verify ()` verwendet Mockito auch Matcher, um zu überprüfen, ob die richtigen Argumente übergeben wurden. Ähnlich wie bei Stubbing kann die Überprüfung mit Matches etwas Overhead einführen, insbesondere wenn Sie mehrere Anrufe mit komplexen Matchern überprüfen.5. Best Practices für Leistung **
- Verwenden Sie die Spezifität mit Bedacht: Verwenden Sie Matcher mit der richtigen Spezifität. Zum Beispiel ist `Anyint ()` weniger spezifisch und schneller als `Gleichung (4), aber mit` Gleichung (4) `Wenn Sie einen bestimmten Wert überprüfen müssen, ist präzise und wirkt sich nicht wesentlich auf die Leistung aus.- Vermeiden Sie unnötige Komplexität: Vermeiden Sie die Verwendung benutzerdefinierter Matcher, sofern dies nicht erforderlich ist. Wenn ein Test eine komplexe Logik erfordert, um Argumente zu entsprechen, sollten Sie den Test vereinfachen oder vorhandene Matcher kreativ verwenden.
- Profilieren Sie Ihre Tests: Wenn Sie Leistungsprobleme in Ihren Tests bemerken, profilieren Sie sie, um Engpässe zu identifizieren. Es ist selten, dass Mockito -Matcher die Hauptursache für erhebliche Leistungsprobleme sind, aber es ist immer gut zu überprüfen.
Zusammenfassend lässt sich sagen, dass Mockito-Argumenten-Matcher einen Overhead einführen, dies im Allgemeinen kein wesentliches Problem ist, es sei denn, Sie haben es mit extrem komplexen oder leistungskritischen Tests zu tun. Die Vorteile der Verwendung von Spielern wie Flexibilität und Klarheit im Testcode überwiegen normalerweise die geringfügigen Leistungskosten.
Zitate:[1] https://stackoverflow.com/questions/56559146/junit-using-eq-argument-mather-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-hould-use-argument-mather-or-passing-argument-directly-when-mockito-uni