Как сопоставить значение null, переданное параметру Class <T> с помощью Mockito

84

У меня есть такие методы:

public <T> method(String s, Class<T> t) {...}

Что мне нужно проверить, что nullпередается второму аргументу при использовании сопоставителей для других параметров, я делал это:

@SuppressWarnings("unchecked")
verify(client).method(eq("String"), any(Class.class));

Но есть ли лучший способ (без предупреждений о подавлении)? Tпредставляет тип возвращаемого значения какого-либо другого метода, который иногда voidи в этих случаях nullпередается.

пустой
источник
Вы пробовали null(вместо any(Class.class))?
Энди
1
Проблема в том, что вы используете сопоставители для других параметров - вы должны использовать сопоставители для всех
пусто

Ответы:

40

Обновление из ответа Дэвида Уоллеса:

По состоянию на 2016–2012 годы Java 8 и Mockito 2.3,

public static <T> T isNull(Class<T> clazz)

это Устаревшее и будет удален в Mockito 3.0

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

public static <T> T isNull()

вместо

Майк грызун
источник
4
Это не сработает на 100%, теперь мне нужно преобразовать класс, например, (Integer) isNull()вместо isNull( Integer.class ).
Энрике де Соуза
4
синтаксис, позволяющий избежать использования приведений, здесьorg.mockito.Mockito.<String>isNull()
Del
143

В Mockito есть isNullсопоставитель , в который можно передать имя класса. Поэтому, если вам нужно использовать его с другими сопоставителями, правильнее будет сделать

verify(client).method(eq("String"),isNull(Class<?>.class));

Теперь это устарело, см. Ответ ниже для нового метода - qaru.site/questions/4123 / ...

Дауд ибн Карим
источник
7
Следует отметить, что для строк нужно использовать (String) isNull().
Майк Райландер,
2
Да уж. isNull(String.class)и (String) isNull()эквивалентны. Выбирайте то, что вам больше подходит.
Давуд ибн Карим,
@mikerodent Спасибо за предложенное редактирование. Вы абсолютно правы. Но вам, вероятно, следует опубликовать свое предложение как новый ответ, а не редактировать мое. Поэтому я отклонил вашу правку, хотя полностью с ней согласен.
Давуд ибн Карим
1
ХОРОШО! Не совсем понимаю почему, но я склоняюсь перед вашим превосходным знанием протокола SO!
Майк грызун
1
Я тоже не понимаю почему. Конечно, предстоящее изменение api должно как-то отразиться в этом ответе, никто не прокручивает вниз :)
blank
20

Это работает для меня:

verify(client).method(eq("String"), eq((Class<?>) null));
Эрик
источник
2
Благодаря! Я никогда не думаю о кастинге null ... пока-пока @SuppressWarnings
пусто