2012-05-11 11 views
15

Czy można udawać (z mockito) metodą z podpisem Set<? extends Car> getCars() bez ostrzeżenia o przekroczeniach? Próbowałem:metoda próbna z generycznym i rozszerzającym się w typie zwrotnym:

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

ale bez względu na to jak ja mogę zadeklarować cars sprecyzowane pojawia się błąd kompilacji. np kiedy zadeklarować jak ten

Set<? extends Car> cars = xxx 

ja dostać standardowy błąd kompilacji generic/Mockito

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

błąd kompilacji, co ty z dostaniem można skopiować/wkleić? – miks

+1

Tłumienie ostrzeżeń, awarie kompilacji i wyjątki to różne rzeczy ... Myślę, że możesz ich pomylić tutaj. –

+0

Próbowałem dokładnie wyjaśnić wszystko. więc jeszcze raz, aby było jasne. Chcę, aby mój kod się skompilował. również chciałbym, aby ten kod nie zawierał żadnych ostrzeżeń i nie ma "@ SupressWarning". Nigdy nie wspominałem o wyjątkach. mam nadzieję, że pomoże – piotrek

Odpowiedz

30

Używaj-gdy jest doReturn alternatywną składnię stubbing.

testowanego systemu:

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

a przypadek testowy:

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()); 
    } 
} 

żadne błędy lub ostrzeżenia tłumienie potrzebne

+1

brzydki, ale działa. Nienawidzę tej składni z dwóch powodów. czytelność i fakt, że całkowicie rezygnujemy z używania generycznych w ogóle. Czy naprawdę jest to niemożliwe przy pomocy leków generycznych? – piotrek

+0

Rozumiem twoją niechęć do składni, ja też wolę składnię kiedy-potem. Nie rozumiem, co masz na myśli mówiąc, że nie można tego zrobić za pomocą leków generycznych. –

+0

Mam na myśli parametr doReturn. to przedmiot. nie jest w żaden sposób związany z typem, który powinien zostać zwrócony. nie ma sprawdzania typu kompilacji-czasu. jednak jeśli nie dostanę lepszej odpowiedzi wezmę to, ponieważ jak powiedziałem - to działa – piotrek

Powiązane problemy