Come abbinare il valore null passato al parametro di Class <T> con Mockito


84

Ho metodi come questi:

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

Che ho bisogno di controllare che nullsia passato al secondo argomento quando uso i matcher per gli altri parametri, ho fatto questo:

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

Ma esiste un modo migliore (senza sopprimere gli avvisi)? Trappresenta il tipo di ritorno di qualche altro metodo, che a volte è voide in questi casi nullviene passato.


Hai provato null(invece di any(Class.class))?
Andy

1
Il problema è quando usi i matcher per gli altri parametri - devi usare i matcher per tutti
vuoto

Risposte:


40

Aggiornamento dalla risposta di David Wallace:

A partire dal 2016-12, Java 8 e Mockito 2.3,

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

è obsoleto e verrà rimosso in Mockito 3.0

uso

public static <T> T isNull()

anziché


4
Questo non funzionerà al 100%, ora devo lanciare la classe, in questo modo (Integer) isNull()invece di isNull( Integer.class ).
Henrique de Sousa

4
la sintassi per evitare di richiedere un cast qui èorg.mockito.Mockito.<String>isNull()
Del

143

Mockito ha un isNullmatcher , dove puoi passare il nome della classe. Quindi, se hai bisogno di usarlo con altri matcher, la cosa corretta da fare è

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

Questo è ora deprecato, vedere la risposta di seguito per il nuovo metodo: https://stackoverflow.com/a/41250852/1348


7
Va notato che per le stringhe è necessario utilizzare (String) isNull().
Mike Rylander

2
Si. isNull(String.class)e (String) isNull()sono equivalenti. Vai con quello che ha più senso per te.
Dawood ibn Kareem

@mikerodent Grazie per la modifica suggerita. Hai assolutamente ragione. Ma probabilmente dovresti pubblicare il tuo suggerimento come una nuova risposta, piuttosto che modificare il mio. Quindi ho rifiutato la tua modifica, anche se sono completamente d'accordo.
Dawood ibn Kareem,

1
OK! Non capisco bene perché, ma mi inchino alla tua conoscenza di gran lunga superiore del protocollo SO!
mike rodent

1
Non capisco neanche il motivo. Sicuramente un imminente cambiamento api dovrebbe riflettersi in qualche modo in questa risposta, nessuno scorre verso il basso :)
vuoto

20

Questo funziona per me:

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

2
Grazie! Non ho mai pensato di lanciare null ... bye bye @SuppressWarnings
vuoto
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.