Gli argomenti di mockito sono potenti strumenti utilizzati nei test unitari per specificare in modo flessibile gli argomenti quando si impostano le derche. Tuttavia, hanno diversi limiti:
1. Contesto di utilizzo: gli argomenti possono essere utilizzati solo nel contesto di metodi di torreggio o verifica. Non possono essere usati quando si chiama metodi sull'oggetto in prova. Ad esempio, non è possibile utilizzare `anystring ()` quando si chiama un metodo su un oggetto reale; Invece, dovresti usare un valore concreto [1] [5].
2. Coerenza tra gli argomenti: quando si utilizza un matcher di argomenti per un argomento, tutti gli altri argomenti devono anche usare i matcher. Non è possibile mescolare i matcher con valori concreti per argomenti diversi nella stessa chiamata del metodo. Questa è una fonte comune di `invaliduseofmatchersException` [7] [8].
3. Limitazioni di beffardo: mockito non può deridere alcuni metodi come `equals ()`, `hashcode ()` o metodi finali. Mentre i matcher di argomenti possono essere usati con metodi che possono essere derisi, non estendono la capacità di deridere questi metodi limitati [3].
4. Tipi di matcher argomentazione: mockito fornisce una varietà di matcher di argomenti integrati (ad esempio, `anyint ()`, `anystring ()`, `isNull ()`), ma è necessario scegliere il tipo corretto per l'argomento. Ad esempio, l'uso di `qualsiasi ()` con un tipo primitivo potrebbe non funzionare come previsto; Invece, usa un matcher più specifico come `anyboolean ()` per i parametri booleani [7].
5. Matcher di argomenti personalizzati: mentre Mockito consente di creare matcher personalizzati usando il metodo `arghat ()`, implementando l'interfaccia `ArgumentMatcher` richiede un'attenta considerazione per garantire che il matcher si comporti come previsto in diversi scenari [2] [4].
6. Integrazione con altre librerie: quando si utilizza Mockito con altre librerie come Hamcrest, assicurarsi che l'integrazione sia gestita correttamente. Ad esempio, Sonarqube potrebbe contrassegnare alcuni usi di `arghat ()` con i matcher Hamcrest come errati, anche se sono validi [4].
In sintesi, mentre gli argomenti di mockito sono versatili, il loro utilizzo è limitato a contesti specifici e richiede coerenza tra gli argomenti del metodo. Inoltre, non superano le limitazioni fondamentali di Mockito riguardo a determinati metodi o classi.
Citazioni:[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-S6073-Mockito-Argument-Matchers-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-matchers
[8] https://www.baeldung.com/mockito-argument matchers