Подтвердить что ты не робот

Matchers.any() для нулевого значения в Mockito

Предположим, что у меня есть этот объект objectDemo, который вызывает метод objectDemoMethod с двумя параметрами String и null. Теперь я хочу проверить, что этот метод был вызван с помощью Mockito:

objectDemo.objectDemoMethod("SAMPLE_STRING", null);

Я написал это:

Mockito.verify(objectDemo, Mockito.times(1)).objectDemoMethod(Matchers.any(String.class), null);

но он дает ошибку:

Недопустимое использование аргументов для нулевого значения.

Есть ли другой способ передать значение null?

4b9b3361

Ответ 1

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

Если вы используете аргументы аргументов, все аргументы должны быть предоставлены с помощью сопоставлений.

Следовательно, исправление заключается в том, чтобы использовать совпадение для второго параметра метода. В этом случае это будет совпадение, соответствующее null. В зависимости от версии Mockito и Java вы можете:

  • Начиная с Mockito 2, вы можете использовать ArgumentMatchers.isNull(). Это работает с Java 8 и выше:

    verify(objectDemo, times(1)).objectDemoMethod(any(String.class), isNull());
    

    Обратите внимание, что если вы работаете с Java 7 или старше, для выполнения этой работы вам понадобится явное преобразование, потому что вывод типа в этих версиях Java не учитывает типы метода:

    verify(objectDemo, times(1)).objectDemoMethod(any(String.class), (String) isNull());
    
  • Если вы используете Mockito 1, вы можете использовать Matchers.isNull(clazz):

    verify(objectDemo, times(1)).objectDemoMethod(any(String.class), isNull(String.class));
    

Для Java & le; 7 или Mockito 1, примеры используют случай, когда второй параметр имеет тип String: его нужно будет заменить фактическим типом параметра метода.

Ответ 2

isNull кажется, устарела

В Java 8 этот метод будет удален в Mockito 3.0. Этот метод используется только для общего удобства, чтобы избежать приведения, это больше не требуется в Java 8.

Я думаю, что вы могли бы использовать nullable:

  • public static <T> T nullable(Class<T> clazz)

Вы можете использовать что-то вроде:

verify(objectDemo, times(1)).objectDemoMethod(any(String.class), isNull(String.class));

Ответ 3

Просто используйте:

Mockito.verify(objectDemo, Mockito.times(1)).objectDemoMethod(Matchers.any(String.class), (ClassName) isNull());

Выше, помогите мне в версии Java 8. Надеюсь, что это поможет вам.