Matcherzy argumentów Mockito to potężne narzędzia używane w testowaniu jednostkowym do elastycznego określenia argumentów podczas konfigurowania próbek. Jednak są one z kilkoma ograniczeniami:
1. Kontekst użytkowania: Matcherzy argumentów można używać tylko w kontekście metod kruszowania lub weryfikacji. Nie można ich używać podczas wywoływania metod w badanym obiekcie. Na przykład nie można użyć `innystring ()` podczas wywoływania metody na prawdziwym obiekcie; Zamiast tego należy użyć wartości konkretnej [1] [5].
2. Spójność między argumentami: Podczas korzystania z zapałek argumentu dla jednego argumentu wszystkie inne argumenty muszą również używać dopasowań. Nie można mieszać dopasowań z konkretnymi wartościami dla różnych argumentów w tym samym wywołaniu metody. Jest to wspólne źródło „invaliduseofMatchersException” [7] [8].
3. Kpiny Ograniczenia: Mockito nie może kpić z niektórych metod, takich jak `equals ()`, `hashcode ()` lub metody końcowe. Chociaż dopasowawcy argumentów można stosować z metodami, które można wyśmiewać, nie rozszerzają zdolności do wyśmiewania tych ograniczonych metod [3].
4. Argument Matcher Rodzaje: Mockleto zapewnia różnorodne wbudowane dopasowania argumentów (np. „Anyint ()`, „AnyString ()`, `isNull ()`), ale musisz wybrać właściwy typ argumentu. Na przykład użycie „dowolnego ()` z pierwotnym typem może nie działać zgodnie z oczekiwaniami; Zamiast tego użyj bardziej specyficznego dopasowania, takiego jak „Anyboolean ()` dla parametrów logicznych [7].
5. Niestandardowe zapałki argumentów: podczas gdy Mockito pozwala tworzyć niestandardowe dopasowawców za pomocą metody „argthat ()`, wdrożenie interfejsu „argumentMatcher” wymaga starannego rozważenia, aby dopasować się zgodnie z oczekiwaniami w różnych scenariuszach [2] [4].
6. Integracja z innymi bibliotekami: Podczas korzystania z Mockle z innymi bibliotekami, takimi jak Hamcrest, upewnij się, że integracja jest odpowiednio obsługiwana. Na przykład Sonarqube może oznaczyć pewne zastosowania „argthat ()` `za pomocą dopasowań Hamcrest jako niepoprawnych, nawet jeśli są one ważne [4].
Podsumowując, podczas gdy dopasowywania argumentów Mockito są wszechstronne, ich użycie jest ograniczone do konkretnych kontekstów i wymaga spójności między argumentami metod. Ponadto nie przezwyciężają fundamentalnych ograniczeń Mockito dotyczące niektórych metod lub klas.
Cytaty:[1] https://groups.google.com/g/mockito/c/ul9ymczqnky
[2] https://kenkousen.substack.com/p/tales-from-the-jar-side-a-mockoto
[3] https://ioflood.com/blog/mockito/
[4] https://community.sonarsource.com/t/problem-with-java-rule-s6073-mocchito-argument-matchers-in-case-of-usage-mockohamcrest-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