Cómo hacer coincidir el nulo pasado al parámetro de Class <T> con Mockito

84

Tengo métodos como estos:

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

Que necesito verificar que nullse pasa al segundo argumento cuando utilizo comparadores para los otros parámetros, he estado haciendo esto:

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

Pero, ¿hay una forma mejor (sin suprimir las advertencias)? Trepresenta el tipo de retorno de algún otro método, que a veces voidy en estos casos nullse pasa.

blanco
fuente
¿Lo has probado null(en lugar de any(Class.class))?
Andy
1
El problema es cuando usa comparadores para los otros parámetros, debe usar comparadores para todos
blanco

Respuestas:

40

Actualización de la respuesta de David Wallace:

A partir de 2016-12, Java 8 y Mockito 2.3,

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

está obsoleto y se eliminará en Mockito 3.0

utilizar

public static <T> T isNull()

en lugar

mike roedor
fuente
4
Esto no funcionará al 100%, ahora necesito lanzar la clase, así en (Integer) isNull()lugar de isNull( Integer.class ).
Henrique de Sousa
4
la sintaxis para evitar requerir una conversión aquí esorg.mockito.Mockito.<String>isNull()
Del
143

Mockito tiene un isNullcomparador , donde puedes pasar el nombre de la clase. Entonces, si necesita usarlo con otros comparadores, lo correcto es hacer

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

Esto ahora está en desuso, consulte la respuesta a continuación para el nuevo método: https://stackoverflow.com/a/41250852/1348

Dawood ibn Kareem
fuente
7
Cabe señalar que para las cadenas es necesario utilizar (String) isNull().
Mike Rylander
2
Si. isNull(String.class)y (String) isNull()son equivalentes. Elija lo que tenga más sentido para usted.
Dawood ibn Kareem
@mikerodent Gracias por la edición sugerida. Tienes toda la razón. Pero probablemente debería publicar su sugerencia como una nueva respuesta, en lugar de editar la mía. Así que rechacé tu edición, aunque estoy completamente de acuerdo con ella.
Dawood ibn Kareem
1
¡OKAY! No entiendo muy bien por qué, ¡pero me inclino ante su conocimiento superior del protocolo SO!
Mike
1
Yo tampoco entiendo por qué. Seguramente un cambio de API inminente debería reflejarse de alguna manera en esta respuesta, nadie se desplaza hacia abajo :)
blanco
20

Esto funciona para mi:

verify(client).method(eq("String"), eq((Class<?>) null));
Eric
fuente
2
¡Gracias! Nunca pienso en lanzar null ... adiós @SuppressWarnings
blanco