Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Was sind die Einschränkungen bei der Verwendung von Mockito -Argumenten -Matches


Was sind die Einschränkungen bei der Verwendung von Mockito -Argumenten -Matches


Mockito -Argumenten -Matcher sind leistungsstarke Tools, die in Unit -Tests verwendet werden, um beim Einrichten von Mocks flexibel Argumente anzugeben. Sie haben jedoch mehrere Einschränkungen:

1. Nutzungskontext: Argument -Matcher können nur im Kontext von Stubbing- oder Überprüfungsmethoden verwendet werden. Sie können nicht verwendet werden, wenn Sie Methoden auf dem zu testenden Objekt aufrufen. Beispielsweise können Sie "AnyString ()` `beim Aufrufen einer Methode für ein reales Objekt nicht verwenden. Stattdessen sollten Sie einen konkreten Wert verwenden [1] [5].

2. Konsistenz über Argumente hinweg: Wenn Sie einen Argument -Match für ein Argument verwenden, müssen alle anderen Argumente auch Matcher verwenden. Sie können Matcher nicht mit konkreten Werten für verschiedene Argumente im selben Methodenaufruf mischen. Dies ist eine gemeinsame Quelle für die "InvaliduseofMatchersException" [7] [8].

3.. Verspottete Einschränkungen: Mockito kann bestimmte Methoden wie "Equals ()`, `HashCode ()` oder endgültige Methoden nicht verspotten. Während Argument -Matcher mit Methoden verwendet werden können, die verspottet werden können, erweitern sie nicht die Fähigkeit, diese eingeschränkten Methoden zu verspotten [3].

4. Argument-Matcher-Typen: Mockito bietet eine Vielzahl integrierter Argument-Matcher (z. B. `Anyint ()`, `Anstring ()`, `inull ()`), aber Sie müssen den richtigen Typ für das Argument auswählen. Beispielsweise funktioniert die Verwendung von `Any ()` mit einem primitiven Typ möglicherweise nicht wie erwartet; Verwenden Sie stattdessen einen spezifischeren Matcher wie "Anyboolean ()" für Boolesche Parameter [7].

5. benutzerdefinierte Argument -Matcher: Während Mockito Sie benutzerdefinierte Matcher mit der Methode "argthat ()" erstellen können, erfordert die Implementierung der "ArgumentMatcher" -Schnittstelle eine sorgfältige Prüfung, um sicherzustellen, dass der Match in verschiedenen Szenarien wie erwartet verhält [2] [4].

6. Integration in andere Bibliotheken: Wenn Sie Mockito mit anderen Bibliotheken wie Hamcrest verwenden, stellen Sie sicher, dass die Integration ordnungsgemäß behandelt wird. Zum Beispiel könnte Sonarqube bestimmte Verwendungen von "argthat ()` mit Hamcrest -Matchern als falsch kennzeichnen, auch wenn sie gültig sind [4].

Zusammenfassend lässt sich sagen, dass Mockito -Argument -Matcher vielseitig sind, ihre Verwendung jedoch auf bestimmte Kontexte beschränkt ist und Konsistenz über Methodenargumente hinweg erfordert. Darüber hinaus überwinden sie die grundlegenden Einschränkungen von Mockito in bestimmten Methoden oder Klassen nicht.

Zitate:
[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-6073-mockito-argument-matchers-in-case-of-sage-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