Jak dopasować wartość null przekazaną do parametru Class <T> za pomocą Mockito

84

Mam takie metody:

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

Że muszę sprawdzić, czy nulljest przekazywany do drugiego argumentu, gdy używam dopasowań dla innych parametrów, robiłem to:

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

Ale czy jest lepszy sposób (bez wyłączania ostrzeżeń)? Treprezentuje typ zwracany przez inną metodę, która jest czasami voidiw takich przypadkach nullprzekazywana.

pusty
źródło
Czy próbowałeś null(zamiast any(Class.class))?
Andy
1
Problem polega na tym, że używasz dopasowań dla innych parametrów - musisz użyć dopasowań dla wszystkich
puste

Odpowiedzi:

40

Aktualizacja z odpowiedzi Davida Wallace'a:

Od 2016-12, Java 8 i Mockito 2.3,

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

jest przestarzały i zostanie usunięty w Mockito 3.0

posługiwać się

public static <T> T isNull()

zamiast

mike gryzoń
źródło
4
To nie zadziała w 100%, teraz muszę rzucić klasę, (Integer) isNull()zamiast tego isNull( Integer.class ).
Henrique de Sousa,
4
składnia pozwalająca uniknąć rzucania tutaj toorg.mockito.Mockito.<String>isNull()
Del
143

Mockito ma isNulldopasowanie , w którym możesz podać nazwę klasy. Więc jeśli potrzebujesz go użyć z innymi dopasowującymi, właściwą rzeczą do zrobienia jest

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

To jest teraz przestarzałe, zobacz odpowiedź poniżej dla nowej metody - https://stackoverflow.com/a/41250852/1348

Dawood ibn Kareem
źródło
7
Należy zauważyć, że w przypadku ciągów należy użyć (String) isNull().
Mike Rylander
2
Tak. isNull(String.class)i (String) isNull()są równoważne. Idź z tym, co jest dla ciebie bardziej sensowne.
Dawood ibn Kareem
@mikerodent Dzięki za sugerowaną zmianę. Masz absolutną rację. Ale prawdopodobnie powinieneś opublikować swoją sugestię jako nową odpowiedź, zamiast edytować moją. Dlatego odrzuciłem twoją zmianę, mimo że całkowicie się z nią zgadzam.
Dawood ibn Kareem
1
OK! Nie całkiem rozumiem dlaczego, ale kłaniam się twojej znacznie lepszej znajomości protokołu SO!
mike gryzoń
1
Nie rozumiem też dlaczego. Z pewnością zbliżająca się zmiana API powinna jakoś znaleźć odzwierciedlenie w tej odpowiedzi, nikt nie przewija w dół :)
puste
20

To działa dla mnie:

verify(client).method(eq("String"), eq((Class<?>) null));
Eric
źródło
2
Dzięki! Nigdy nie myślę o rzuceniu null ... pa pa @SuppressWarnings
blank