is it possible to pass the type of an interface with generics?
The interface:
public interface AsyncCallback
In my test me
There is a type-safe way: use ArgumentMatchers.any()
and qualify it with the type:
ArgumentMatchers.<AsyncCallback<ResponseX>>any()
I had to adopt the following mechamism to allow for generics:
import static org.mockito.Matchers.any;
List<String> list = any();
when(callMyMethod.getResult(list)).thenReturn(myResultString);
Hope this helps someone.
I had a similar problem using Spring Example
:
Mockito.when(repo.findAll(Mockito.<Example<SrvReqToSupplierComment>>any()))
.thenReturn(Lists.emptyList());
Here, you have to use qualification, b/c findAll method can take multiple types, like Sort
and Iterable
. You can also use Mockito.any(Example.class)
of course with the type safety warning.
You can just cast it, adding suppress warnings if you like:
@SuppressWarnings("unchecked")
AsyncCallback<ResponseX> callback = Mockito.any(AsyncCallback.class)
If Java allowed 'generic' generics they could have a method like this which is what you are looking for
private static <T, E> T<E> mock(Class<T<E>> clazz)
Posting pierrefevrier comment as answer which might be useful if it present in a answer instead of comments.
With new versions of Mockito: (Matchers.<AsyncCallback<ResponseX>>any()
Using Java 8, you can simply use any()
(assuming static import) without argument or type parameter because of enhanced type inference. The compiler now knows from the target type (the type of the method argument) that you actually mean Matchers.<AsyncCallback<ResponseX>>any()
, which is the pre-Java 8 solution.