Як зіставити нуль, переданий параметру класу <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-12, 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()
Дель

143

Mockito має isNullШукача , де ви можете пройти в ім'я класу. Отже, якщо вам потрібно використовувати його з іншими збіжниками, правильно зробити

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

Це вже застаріло, див. Відповідь нижче для нового методу - https://stackoverflow.com/a/41250852/1348


7
Слід зазначити, що для рядків потрібно використовувати (String) isNull().
Mike Rylander

2
Ага. isNull(String.class)і (String) isNull()еквівалентні. Ідіть із тим, що з вас має більше сенсу.
Dawood ibn Kareem

@mikerodent Дякуємо за запропоновану редагування. Ви абсолютно праві. Але ви, мабуть, повинні опублікувати свою пропозицію як нову відповідь, а не редагувати мою. Тож я відхилив вашу редакцію, хоча я з нею повністю згідний.
Dawood ibn Kareem

1
В ПОРЯДКУ! Не зовсім розумію, чому, але я поклоняюся вашим набагато кращим знанням протоколу SO!
гризун Майк

1
Я теж не розумію, чому. Безумовно, майбутня зміна API повинна якось відображатись у цій відповіді, ніхто не прокручує вниз :)
порожньо

20

Це працює для мене:

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

2
Дякую! Я ніколи не думаю про кастинг null ... до побачення @SuppressWarnings
порожній
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.