Начиная с Java 8 вы можете использовать метод без аргументов, any
и аргумент типа будет выведен компилятором:
verify(bar).doStuff(any());
объяснение
Новым в Java 8 является то, что целевой тип выражения будет использоваться для определения параметров типа его подвыражений. До Java 8 только аргументы методов, которые использовались для вывода параметров типа (большую часть времени).
В этом случае тип параметра doStuff
будет целевым типом any()
, а тип возвращаемого значения any()
будет выбран в соответствии с этим типом аргумента.
Этот механизм был добавлен в Java 8 в основном для возможности компиляции лямбда-выражений, но в целом он улучшает вывод типов.
Примитивные типы
К сожалению, это не работает с примитивными типами:
public interface IBar {
void doPrimitiveStuff(int i);
}
verify(bar).doPrimitiveStuff(any()); // Compiles but throws NullPointerException
verify(bar).doPrimitiveStuff(anyInt()); // This is what you have to do instead
Проблема в том, что компилятор будет выводить Integer
как возвращаемое значение any()
. Mockito не будет знать об этом (из-за стирания типа) и вернет значение по умолчанию для ссылочных типов, то есть null
. Среда выполнения попытается распаковать возвращаемое значение, вызвав intValue
метод перед его передачей doStuff
, и возникнет исключение.
any
метод должен просто работать. Вы не ищите ответ для вещей, которые просто работают!any()
но был в порядкеanyBoolean()
, что прекрасно освещает последняя часть вашего ответа.Это должно работать
источник
verify(bar).DoStuff(any[Array[Foo]])
Вы можете использовать
Mockito.isA()
для этого:http://site.mockito.org/mockito/docs/current/org/mockito/Matchers.html#isA(java.lang.Class)
источник
Поскольку мне нужно было использовать эту функцию для моего последнего проекта (в какой-то момент мы обновили с 1.10.19), просто чтобы пользователи (которые уже используют версию 2.1.0 mockito-core или выше ) были в курсе, статическая Методы из вышеупомянутых ответов должны быть взяты из
ArgumentMatchers
класса:Помните об этом, если вы планируете обновлять артефакты Mockito, возможно, начиная с версии 3, этот класс может больше не существовать:
В соответствии с 2.1.0 и выше, Javadoc org.mockito.Matchers заявляет:
Я написал небольшую статью о символах подстановки, если вы готовы к дальнейшему чтению.
источник