java generics mockito

java - Mockito.any() pasa interfaz con genéricos



generics (6)

¿es posible pasar el tipo de interfaz con genéricos?

La interfaz:

public interface AsyncCallback<T>

En mi método de prueba:

Mockito.any(AsyncCallback.class)

Poner <ResponseX> detrás o para .class funcionó.


Además de la respuesta de thSoft al poner la llamada calificada en cualquier método (), pude eliminar la calificación, ya que el tipo de devolución permitió la inferencia:

private HashMap<String, String> anyStringStringHashMap() { return Matchers.any(); }


Hay una forma segura de tipo: use ArgumentMatchers.any() y califíquelo con el tipo:

ArgumentMatchers.<AsyncCallback<ResponseX>>any()

como pierrefevrier mencionó en los comentarios, con las nuevas versiones de Mockito es

Matchers.<AsyncCallback<ResponseX>>any()


Publicar el comentario de pierrefevrier como respuesta que podría ser útil si se presenta en una respuesta en lugar de en los comentarios.

Con las nuevas versiones de Mockito: (Matchers.<AsyncCallback<ResponseX>>any()


Puede simplemente lanzarlo y agregar advertencias de supresión si lo desea:

@SuppressWarnings("unchecked") AsyncCallback<ResponseX> callback = Mockito.any(AsyncCallback.class)

Si Java permitiera genéricos ''genéricos'', podrían tener un método como este, que es lo que está buscando

private static <T, E> T<E> mock(Class<T<E>> clazz)


Tuve que adoptar el siguiente mecamismo para permitir genéricos:

import static org.mockito.Matchers.any; List<String> list = any(); when(callMyMethod.getResult(list)).thenReturn(myResultString);

Espero que esto ayude a alguien.


Usando Java 8, puede simplemente usar any() (asumiendo la importación estática) sin argumento o parámetro de tipo debido a la inferencia de tipo mejorada. El compilador ahora sabe por el tipo de destino (el tipo del argumento de método) que realmente quiere decir Matchers.<AsyncCallback<ResponseX>>any() , que es la solución anterior a Java 8.