Mockito -argumentmatchare är kraftfulla verktyg som används i enhetstest för att flexibelt ange argument när man ställer in Mocks. Men de kommer med flera begränsningar:
1. Användningskontext: Argumentmatchare kan endast användas inom ramen för stubb- eller verifierande metoder. De kan inte användas när de ringer metoder på objektet som testas. Till exempel kan du inte använda `AnyString ()` när du kallar en metod på ett verkligt objekt; Istället bör du använda ett konkret värde [1] [5].
2. Konsistens över argument: När du använder en argumentmatcher för ett argument måste alla andra argument också använda matchare. Du kan inte blanda matchare med konkreta värden för olika argument i samma metodsamtal. Detta är en vanlig källa till "InvalidUseOfMatchersException" [7] [8].
3. Hånbegränsningar: Mockito kan inte håna vissa metoder som `lika ()`, `hashcode ()` eller slutliga metoder. Medan argumentmatchare kan användas med metoder som kan hånas, utvidgar de inte förmågan att håna dessa begränsade metoder [3].
4. Argumentmatcher-typer: Mockito tillhandahåller en mängd inbyggda argumentmatchare (t.ex. `Anyint ()`, `AnyString ()`, `isNull ()`), men du måste välja rätt typ för argumentet. Att till exempel använda `någon () 'med en primitiv typ kanske inte fungerar som förväntat; Använd istället en mer specifik matcher som `AnyBoolean ()` för booleska parametrar [7].
5. Anpassade argumentmatchare: Medan Mockito låter dig skapa anpassade matchare med metoden `argThat ()`, kräver implementering av `ArgumentMatcher` -gränssnittet noggrant övervägande för att säkerställa att matcharen uppträder som förväntat i olika scenarier [2] [4].
6. Integration med andra bibliotek: När du använder mockito med andra bibliotek som Hamcrest, se till att integrationen hanteras korrekt. Till exempel kan SonarQube flagga vissa användningar av `argthat ()` med Hamcrest -matchare som felaktiga, även om de är giltiga [4].
Sammanfattningsvis, medan Mockito -argumentmatchare är mångsidiga, är deras användning begränsad till specifika sammanhang och kräver konsistens mellan metodargument. Dessutom övervinner de inte de grundläggande begränsningarna för mockito angående vissa metoder eller klasser.
Citeringar:[1] https://groups.google.com/g/mockito/c/ul9ymczqnky
[2] https://kenkousen.substack.com/p/tales-from-jar-side-a-mockito
[3] https://ioflood.com/blog/mockito/
]
[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