Risposte:
Esiste un modo sicuro per ArgumentMatchers.any()il tipo: usalo e qualificalo con il tipo:
ArgumentMatchers.<AsyncCallback<ResponseX>>any()
(Matchers.<AsyncCallback<ResponseX>>any()
Matchersè in realtà deprecato, ma ArgumentMatchersha funzionato.
Usando Java 8, puoi semplicemente usare any()(assumendo l'importazione statica) senza argomento o parametro di tipo a causa dell'inferenza di tipo avanzata. Il compilatore ora sa dal tipo di destinazione (il tipo dell'argomento del metodo) che intendi effettivamente Matchers.<AsyncCallback<ResponseX>>any(), che è la soluzione pre-Java 8.
any()corrisponderebbe AsyncCallback<AnyOtherType>anche?
AsyncCallback<AnyOtherType>non dovrebbe nemmeno essere compilato se il tipo di argomento è 'AsyncCallback <ResponseX>'.
when(x.y(any())).thenAnswer(...)ad esempio, dove si ytrova public <T> T y(AsyncCallback<T> arg). Forse sarebbe meglio controllare il tipo nella risposta, se è quello che serve?
isA(). Se l'oggetto contiene un Classoggetto corrispondente al tipo e l'interfaccia lo espone, immagino che tu possa verificarlo in un matcher personalizzato. O per esempio in caso di a Collectionpotresti controllare il tipo di elementi.
Matchersè stato sostituito da ArgumentMatchersin Mockito v2
Ho dovuto adottare il seguente meccanismo per consentire i generici:
import static org.mockito.Matchers.any;
List<String> list = any();
when(callMyMethod.getResult(list)).thenReturn(myResultString);
Spero che questo aiuti qualcuno.
Pubblicare un commento pierrefevrier come risposta che potrebbe essere utile se presente in una risposta anziché in commenti.
Con le nuove versioni di Mockito: (Matchers.<AsyncCallback<ResponseX>>any()
Puoi semplicemente lanciarlo, aggiungendo avvisi di soppressione se ti piace:
@SuppressWarnings("unchecked")
AsyncCallback<ResponseX> callback = Mockito.any(AsyncCallback.class)
Se Java consentisse generici "generici", potrebbero avere un metodo come questo, che è quello che stai cercando
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, se avessi intenzione di assegnarlo a una variabile separata, potresti semplicemente usare any()come nella risposta di INtoy. Ora con Java 8, any()può essere utilizzato in linea senza la necessità di un compito separato.
Ho avuto un problema simile usando Spring Example:
Mockito.when(repo.findAll(Mockito.<Example<SrvReqToSupplierComment>>any()))
.thenReturn(Lists.emptyList());
Qui, devi usare la qualifica, b / c Il metodo findAll può assumere più tipi, come Sorte Iterable. Mockito.any(Example.class)Ovviamente puoi anche usarlo con l'avviso di sicurezza tipo.