Sto usando mockito 1.9.5. Ho il codice seguente:mocking un metodo che restituisce generici con caratteri jolly utilizzando mockito
public class ClassA {
public List<? extends MyInterface> getMyInterfaces() {
return null;
}
public static void testMock() {
List<MyInterface> interfaces = new ArrayList<>();
ClassA classAMock = mock(ClassA.class);
when(classAMock.getMyInterfaces()).thenReturn(interfaces);
}
ottengo un errore di compilazione per il thenReturn(interfaces)
dicendo:
"The method thenReturn(List<capture#1-of ? extends MyInterface>) in the type
OngoingStubbing<List<capture#1-of ? extends MyInterface>> is not applicable for the arguments
(List<MyInterface>)"
Tuttavia, quando uso il metodo di Mockito thenAnswer
, non ottengo l'errore. Qualcuno può dirmi cosa sta succedendo? Perché ottengo l'errore quando utilizzo il metodo thenReturn
? C'è qualche altro modo per risolvere questo problema quando ClassA
è fornito da una terza parte e non può essere modificato?
Non si dovrebbe avere il carattere jolly nel tipo di ritorno di 'getMyInterfaces'. Non è una buona pratica, perché i clienti di quella API devono gestire una wildcard di cui non sanno nulla. – SpaceTrucker
Non controllo questa API. È dato da una terza parte. – user1504992
@SpaceTrucker Penso che avere un tipo di ritorno come 'Elenco estende MyInterface> 'è una cosa perfettamente sensata da fare. Significa che tu (come il chiamante del metodo) puoi ottenere gli oggetti 'MyInterface' dalla lista, ma non puoi inserire nulla in esso. –