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() (который ссылается на равенство, т. е. ==), и в более общем плане вы можете написать свои собственные сопоставители.