Mockito Argument Matchers são ferramentas poderosas usadas nos testes de unidade para especificar de maneira flexível argumentos ao configurar zombarias. No entanto, eles vêm com várias limitações:
1. Contexto de uso: os correspondentes de argumentos só podem ser usados no contexto de métodos de extração ou verificação. Eles não podem ser usados ao chamar métodos no objeto em teste. Por exemplo, você não pode usar `anystring ()` ao chamar um método em um objeto real; Em vez disso, você deve usar um valor de concreto [1] [5].
2. Consistência entre os argumentos: Ao usar um lactador de argumentos para um argumento, todos os outros argumentos também devem usar os correspondentes. Você não pode misturar correspondências com valores de concreto para diferentes argumentos na mesma chamada de método. Esta é uma fonte comum do `invaliduseofMatcherException` [7] [8].
3. Limitações de zombaria: Mockito não pode zombar de certos métodos como `iguals ()`, `hashcode ()` ou métodos finais. Embora os correspondentes de argumentos possam ser usados com métodos que podem ser ridicularizados, eles não estendem a capacidade de zombar desses métodos restritos [3].
4. Tipos de Matcher de argumento: O Mockito fornece uma variedade de Matcores de Argumento Integrado (por exemplo, `Anyint ()`, `AnyString ()`, `ISNULL ()`), mas você deve escolher o tipo correto para o argumento. Por exemplo, o uso de `qualquer ()` com um tipo primitivo pode não funcionar conforme o esperado; Em vez disso, use um combinador mais específico como `AnyBoolean ()` para parâmetros booleanos [7].
5. Matcores de argumentos personalizados: enquanto o Mockito permite criar correspondências personalizadas usando o método `argthat ()`, a implementação da interface `ArgumentMatcher` requer uma consideração cuidadosa para garantir que o correspondente se comporte conforme o esperado em diferentes cenários [2] [4].
6. Integração com outras bibliotecas: Ao usar o Mockito com outras bibliotecas como o Hamcrest, verifique se a integração é tratada corretamente. Por exemplo, o Sonarqube pode sinalizar certos usos de `argthat ()` com o Hamcrest Matchers como incorreto, mesmo que sejam válidos [4].
Em resumo, embora os matcores de argumentos da Mockito sejam versáteis, seu uso é restrito a contextos específicos e requer consistência entre os argumentos do método. Além disso, eles não superam as limitações fundamentais do Mockito em relação a certos métodos ou classes.
Citações:[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