Matchito argumenty Matchers jsou výkonné nástroje používané při testování jednotek k flexibilně specifikaci argumentů při nastavování simulovačů. Přicházejí však s několika omezeními:
1. Kontext použití: Argumentové porovnávače lze použít pouze v kontextu strnivovacích nebo ověřujících metod. Nelze je použít při volání metod na testovacím objektu. Například při volání metody na skutečný objekt nemůžete použít `anyString ()`; Místo toho byste měli použít konkrétní hodnotu [1] [5].
2. konzistence napříč argumenty: Při použití argumentu pro jeden argument musí všechny ostatní argumenty také používat porovnávače. Ve stejném volání metody nemůžete smíchat porovnávače s konkrétními hodnotami pro různé argumenty. Toto je běžný zdroj „InvaliduseofMatcherSexception“ [7] [8].
3. Omezení zesměšňování: Mockito se nemůže zesměšňovat určité metody, jako je `equals ()`, `hashcode ()` nebo konečné metody. Zatímco porovnávače argumentů mohou být použity metodami, které mohou být zesměšňovány, nerozšiřují schopnost zesměšňovat tyto omezené metody [3].
4. argumenty typy zápasů: Mockito poskytuje celou řadu vestavěných argumentových porovnávačů (např. `Anyint ()`, `AnyString ()`, `isNull ()`), ale musíte pro argument vybrat správný typ. Například použití `libovolný ()` s primitivním typem nemusí fungovat podle očekávání; Místo toho použijte konkrétnější porovnávač jako `Anyboolean ()` pro booleovské parametry [7].
5. Vlastní argumenty Matchers: Zatímco Mockito vám umožňuje vytvářet vlastní porovnávače pomocí metody „argthat ()“, implementace rozhraní `argumentMatcher` vyžaduje pečlivé zvážení, aby se zajistilo, že se porovnávač chová podle očekávání v různých scénářích [2] [4].
6. Integrace s jinými knihovnami: Při používání Mockito s jinými knihovnami, jako je Hamcrest, zajistěte, aby byla integrace správně zpracována. Například, Sonarqube může označit určitá použití `argthat ()` s Hamcrest Matchers jako nesprávné, i když jsou platné [4].
Stručně řečeno, zatímco MOCKITO argumenty jsou všestranní, jejich použití je omezeno na konkrétní kontexty a vyžaduje konzistenci napříč argumenty metod. Kromě toho nepřekonávají základní omezení Mockito ohledně určitých metod nebo tříd.
Citace:[1] https://groups.google.com/g/mockito/c/ul9ymczqnky
[2] https://kenkousen.substack.com/p/tales-from-the-jar-side-amockito
[3] https://ioflood.com/blog/mockito/
[4] https://community.sonarsource.com/t/problem-with-java-rule-s6073-mockito-argument-maatchers- in-case-of-usage-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-machers
[8] https://www.baeldung.com/mockito-argument-machers