Маттерс -аргументы Mockito - это мощные инструменты, используемые в модульном тестировании, чтобы гибко указать аргументы при настройке макетов. Однако они поставляются с несколькими ограничениями:
1. Контекст использования: Сопоставления аргументов могут использоваться только в контексте загрязняющих или проверенных методов. Они не могут быть использованы при вызове методов на тестируемом объекте. Например, вы не можете использовать `antystring ()` при вызове метода на реальном объекте; Вместо этого вы должны использовать конкретное значение [1] [5].
2. Последовательность в разных аргументах: при использовании соответствующего аргумента для одного аргумента все другие аргументы также должны использовать совпадения. Вы не можете смешивать совпадения с конкретными значениями для разных аргументов в одном и том же вызове метода. Это является общим источником `envaliduseOfMatchersException` [7] [8].
3. Измешительные ограничения: Mockito не может издеваться над определенными методами, такими как `equals ()`, `hashcode ()` или окончательные методы. В то время как совпадения аргументов можно использовать с методами, которые можно высмеивать, они не расширяют возможности издеваться над этими ограниченными методами [3].
4. Типы сопоставления аргументов: Mockito предоставляет множество встроенных совпадений аргументов (например, `anyint ()`, `anystring ()`, `isnull ()`), но вы должны выбрать правильный тип для аргумента. Например, использование `any ()` с примитивным типом может работать не так, как ожидалось; Вместо этого используйте более специфический сочетание, например, `AnyBoolean ()` для логических параметров [7].
5. Пользовательские сопоставления аргументов: в то время как Mockito позволяет вам создавать пользовательские совпадения, используя метод `argthat ()`, реализуя интерфейс `ArgiryMatcher`, требует тщательного рассмотрения, чтобы гарантировать, что совпадение ведет себя так же, как и ожидалось в разных сценариях [2] [4].
6. Интеграция с другими библиотеками: при использовании Mockito с другими библиотеками, такими как Hamcrest, убедитесь, что интеграция обрабатывается должным образом. Например, Sonarqube может пометить определенное использование `argthat ()` с маттерами Hamcrest в качестве неверного, даже если они действительны [4].
Таким образом, в то время как совместные сопоставления аргументов Mockito являются универсальными, их использование ограничено конкретными контекстами и требует согласованности между аргументами метода. Кроме того, они не преодолевают фундаментальные ограничения Mockito в отношении определенных методов или классов.
Цитаты:[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-for-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