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.


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


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


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));

2
Dzięki! Nigdy nie myślę o rzuceniu null ... pa pa @SuppressWarnings
blank
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.