Respuestas:
Hay una forma segura de tipo: utilícela ArgumentMatchers.any()
y califíquela con el tipo:
ArgumentMatchers.<AsyncCallback<ResponseX>>any()
(Matchers.<AsyncCallback<ResponseX>>any()
Matchers
en realidad está en desuso, pero ArgumentMatchers
funcionó.
Con Java 8, simplemente puede usar any()
(suponiendo 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 de argumento del método) lo que realmente quiere decir Matchers.<AsyncCallback<ResponseX>>any()
, que es la solución anterior a Java 8.
any()
coincidiría AsyncCallback<AnyOtherType>
tan bien?
AsyncCallback<AnyOtherType>
ni siquiera debería compilar si el tipo de argumento es 'AsyncCallback <ResponseX>'.
when(x.y(any())).thenAnswer(...)
por ejemplo, dónde y
está public <T> T y(AsyncCallback<T> arg)
. Quizás sería mejor verificar el tipo en la respuesta, si eso es lo que se necesita.
isA()
. Si el objeto contiene un Class
objeto correspondiente al tipo, y la interfaz lo expone, supongo que podría verificarlo en un comparador personalizado. O, por ejemplo, en el caso de Collection
que pueda comprobar el tipo de los elementos.
Matchers
fue reemplazado por ArgumentMatchers
en Mockito v2
Tuve que adoptar el siguiente mecamismo para permitir los genéricos:
import static org.mockito.Matchers.any;
List<String> list = any();
when(callMyMethod.getResult(list)).thenReturn(myResultString);
Espero que esto ayude a alguien.
Publicar un comentario de pierrefevrier como respuesta, lo que podría ser útil si se presenta en una respuesta en lugar de comentarios.
Con nuevas versiones de Mockito: (Matchers.<AsyncCallback<ResponseX>>any()
Puede lanzarlo, agregando 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)
You cannot use argument matchers outside of verification or stubbing.
@SuppressWarnings
: pre-java 8, si fuera a asignarlo a una variable separada, podría usarlo any()
como en la respuesta de INtoy. Ahora con Java 8, any()
se puede usar en línea sin la necesidad de una asignación por separado.
Tuve un problema similar al usar Spring Example
:
Mockito.when(repo.findAll(Mockito.<Example<SrvReqToSupplierComment>>any()))
.thenReturn(Lists.emptyList());
Aquí, debe usar la calificación, el método b / c findAll puede tomar varios tipos, como Sort
y Iterable
. También puede utilizar, Mockito.any(Example.class)
por supuesto, con el tipo de advertencia de seguridad.