Mockito Matchers.любой (...) только по одному аргументу
Я хочу сделать это:
verify(function, Mockito.times(1)).doSomething(argument1, Matchers.any(Argument2.class));
здесь argument1 является экземпляром specfic типа Argument1 и argument2 является любым экземпляром типа Argument2.
но я получаю сообщение об ошибке:
org.mockito.exceptions.misusing.InvalidUseOfMatchersException: Invalid use of argument matchers! 2 matchers expected, 1 recorded. This exception may occur if matchers are combined with raw values:
//incorrect:
someMethod(anyObject(), "raw String"); When using matchers, all arguments have to be provided by matchers. For example:
//correct:
someMethod(anyObject(), eq("String by matcher"));
следуя этому совету, я могу написать следующее, И все в порядке:
verify(function, Mockito.times(1)).doSomething(Matchers.any(Argument1.class), Matchers.any(Argument2.class));
где я ищу любой аргумент типа Argument1 и ни одного аргумента типа Argument2.
как я могу достичь этого желаемого поведения?
1 ответов
существует более одного возможного аргумента matcher и один eq
, который упоминается в сообщении об исключении. Использовать:
verify(function, times(1)).doSomething(eq(arg1), any(Argument2.class));
(статический импорт должен быть там...eq()
и Matchers.eq()
).
у вас также есть same()
(который ссылается на равенство, т. е. ==
), и в более общем плане вы можете написать свои собственные сопоставители.