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 ArgumentMatchers
ha 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 y
trova 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 Class
oggetto corrispondente al tipo e l'interfaccia lo espone, immagino che tu possa verificarlo in un matcher personalizzato. O per esempio in caso di a Collection
potresti controllare il tipo di elementi.
Matchers
è stato sostituito da ArgumentMatchers
in 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 Sort
e Iterable
. Mockito.any(Example.class)
Ovviamente puoi anche usarlo con l'avviso di sicurezza tipo.