Как сопоставить значение 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
пусто
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.