Respostas:
Existe uma maneira segura de digitar: use ArgumentMatchers.any()
e qualifique-a com o tipo:
ArgumentMatchers.<AsyncCallback<ResponseX>>any()
(Matchers.<AsyncCallback<ResponseX>>any()
Matchers
está realmente obsoleto, mas ArgumentMatchers
funcionou.
Usando o Java 8, você pode simplesmente usar any()
(assumindo importação estática) sem argumento ou parâmetro de tipo devido à inferência de tipo aprimorada. O compilador agora sabe do tipo de destino (o tipo do argumento do método) que você realmente quer dizer Matchers.<AsyncCallback<ResponseX>>any()
, que é a solução pré-Java 8.
any()
combinaria AsyncCallback<AnyOtherType>
?
AsyncCallback<AnyOtherType>
nem deve ser compilado se o tipo de argumento for 'AsyncCallback <ResponseX>'.
when(x.y(any())).thenAnswer(...)
por exemplo, onde y
está public <T> T y(AsyncCallback<T> arg)
. Talvez seja melhor verificar o tipo na resposta, se é isso que é necessário?
isA()
. Se o objeto contiver um Class
objeto correspondente ao tipo e a interface expuser isso, acho que você poderá verificá-lo em um correspondente personalizado. Ou, por exemplo, no caso de um, Collection
você pode verificar o tipo dos elementos.
Matchers
foi substituído por ArgumentMatchers
no Mockito v2
Eu tive que adotar o seguinte mecanismo para permitir genéricos:
import static org.mockito.Matchers.any;
List<String> list = any();
when(callMyMethod.getResult(list)).thenReturn(myResultString);
Espero que isso ajude alguém.
Você pode simplesmente transmiti-lo, adicionando avisos de supressão, se desejar:
@SuppressWarnings("unchecked")
AsyncCallback<ResponseX> callback = Mockito.any(AsyncCallback.class)
Se o Java permitisse genéricos 'genéricos', eles poderiam ter um método como este, que é o que você está procurando
private static <T, E> T<E> mock(Class<T<E>> clazz)
You cannot use argument matchers outside of verification or stubbing.
@SuppressWarnings
: pré-java 8, se você fosse atribuí-lo a uma variável separada, você poderia usar any()
como na resposta do INtoy. Agora, com o java 8, any()
pode ser usado em linha sem a necessidade de uma atribuição separada.
Eu tive um problema semelhante usando o Spring Example
:
Mockito.when(repo.findAll(Mockito.<Example<SrvReqToSupplierComment>>any()))
.thenReturn(Lists.emptyList());
Aqui, você deve usar a qualificação, o método findAll b / c pode levar vários tipos, como Sort
e Iterable
. Você também pode usar, é Mockito.any(Example.class)
claro, com o aviso de segurança de tipo.