2012-05-11 14 views
15

È possibile simulare (con il metodo mockito) con la firma Set<? extends Car> getCars() senza avvisi supress? ho provato:metodo mock con tipo generico e esteso in restituzione

XXX cars = xxx; 
when(owner.getCars()).thenReturn(cars); 

ma non importa quanto dichiaro cars ho sempre puntuale ottengo un errore di compilazione. per esempio quando mi dichiaro come questo

Set<? extends Car> cars = xxx 

ottengo l'errore di compilazione generico/Mockito serie

The method thenReturn(Set<capture#1-of ? extends Car>) in the type OngoingStubbing<Set<capture#1-of ? extends Car>> is not applicable for the arguments (Set<capture#2-of ? extends Car>) 
+0

errore quello di compilazione vuoi arrivare, si può copiare/incollare? – miks

+1

La soppressione degli avvisi, l'errore di compilazione e le eccezioni sono tutte cose diverse ... Penso che potresti confonderle qui. –

+0

ho provato a spiegare tutto con precisione. quindi ancora una volta per essere chiari. voglio che il mio codice venga compilato inoltre mi piacerebbe che il codice non avesse avvisi e non '@ SupressWarning'. non ho mai parlato di eccezioni. Spero che questo sia utile – piotrek

risposta

30

Usare il doReturn, quando la sintassi stubbing alternativo.

sistema in prova:

public class MyClass { 
    Set<? extends Number> getSet() { 
    return new HashSet<Integer>(); 
    } 
} 

e il banco di prova:

import static org.mockito.Mockito.*; 

import java.util.HashSet; 
import java.util.Set; 

import org.junit.Test; 

public class TestMyClass { 
    @Test 
    public void testGetSet() { 
    final MyClass mockInstance = mock(MyClass.class); 

    final Set<Integer> resultSet = new HashSet<Integer>(); 
    resultSet.add(1); 
    resultSet.add(2); 
    resultSet.add(3); 

    doReturn(resultSet).when(mockInstance).getSet(); 

    System.out.println(mockInstance.getSet()); 
    } 
} 

errori o avvertimento soppressione necessario

+1

brutto ma funziona. Odio questa sintassi per due motivi. la leggibilità e il fatto che siamo completamente rassegnati dall'utilizzare i farmaci generici. È davvero impossibile farlo con i generici? – piotrek

+0

Capisco la tua antipatia per la sintassi, preferisco anche la sintassi when-then. Non capisco cosa intendi perché è impossibile farlo con i farmaci generici. –

+0

sto parlando del parametro doReturn. è un oggetto. non è legato in alcun modo al tipo che deve essere restituito. non esiste un controllo del tipo di compilazione. tuttavia se non ottengo risposta migliore prenderò questo, perché come ho detto - funziona – piotrek

Problemi correlati