Mockito isA() & any...()

В чем разница между:

    verify(mock, times(1)).myMethod(Matchers.isA(String.class));
    verify(mock, times(1)).myMethod(Matchers.anyString());

из библиотеки Mockito? Оба передают мой метод, и мне интересно, какой из них "лучше" использовать.

Ответы

Ответ 1

isA проверяет, соответствует ли класс ожидаемому классу. В Mockito 1.x, any, anyObject и anyString игнорировать аргумент целиком, включая его тип, даже если any может принимать параметр класса, а anyString указывает его в имени.

Как правило, если у вас нет причин для защиты от несовместимого аргумента, вы можете, вероятно, придерживаться any и anyString. Стиль Mockito предпочитает гибкие тестовые примеры, что означает проверку только тех вещей, которые вы явно проверяете, и преднамеренно позволяя всем остальным быть неуказанными.

ОБНОВЛЕНИЕ: Коммандер Mockito Brice предложил некоторый исторический фон и будущее направление:

Для исторической ссылки any является сокращенным псевдонимом anything, в то время API заставлял его бросать, а участники и/или участники думали о передаче класса в качестве параметра, чтобы избежать этого приведения, без изменение семантики этого API. Однако это изменение в конечном итоге изменило то, что люди думали, что этот API работает. Это будет исправлено в mockito 2 +