2015-04-27 2 views
9

Я хочу, чтобы это сделать:Mockito Matchers.any (...) от одного аргумента только

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)); 

Где я ищу любого arguement типа argument1 и любой аргумент типа Argument2.

Как я могу добиться этого желаемого поведения?

ответ

13

Существует более одного возможного аргумента аргумента, а один - eq, который указан в сообщении об исключении. Использование:

verify(function, times(1)).doSomething(eq(arg1), any(Argument2.class)); 

(статический импорт должен быть там - eq() это Matchers.eq()).

У вас также есть same() (что делает ссылку на равенство, то есть ==), и в целом вы можете написать свои собственные матчи.

+0

Смотря на меня в лицо, мне очень помогает, не тратя время на чтение! Спасибо за это. –

 Смежные вопросы

  • Нет связанных вопросов^_^