ArgumentCapture не работает

#android #unit-testing #mockito

#Android #модульное тестирование #mockito

Вопрос:

Я пытаюсь проверить, что мой mockResource вызывает getQuantityString(), передавая нужное количество.

Фактический код с использованием getQuantityString()

 resources.getQuantityString(R.plurals.SUCCESS,5,5);
  

В тесте:

 @Captor private ArgumentCaptor<Integer> firstIntegerCaptor;
verify(resources).getQuantityString(isA(int.class),firstIntegerCaptor.capture(), any());
  

Я получил ошибку ниже.

 org.mockito.exceptions.verification.junit.ArgumentsAreDifferent: 
Argument(s) are different! Wanted:
resources.getQuantityString(
    isA(int),
    <Capturing argument>,
    <any>
);

Actual invocation has different arguments:
resources.getQuantityString(
    2131165186,
    5,
    5
);
  

Я проверяю прототип этой функции.

 public String getQuantityString(int id, int quantity, Object... formatArgs)
  

Ошибка из-за объекта… formatArgs или Integer не соответствует int?

Ответ №1:

Использовать

 verify(resources).getQuantityString(anyInt(),firstIntegerCaptor.capture(),  Matchers.<Object>anyVararg());