2012-05-11 10 views
15

¿Es posible simular (con mockito) el método con la firma Set<? extends Car> getCars() sin advertencias de supresión? He intentado:método simulado con genérico y se extiende en el tipo de devolución

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

pero no importa cómo me declaro cars i todos los días sale un error de compilación. por ejemplo cuando me declaro como esto

Set<? extends Car> cars = xxx 

consigo el error estándar de la compilación genérica/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

error de compilación lo que estás recibiendo, que puede copiar/pegar? – miks

+1

La supresión de advertencia, la falla de compilación y las excepciones son todas cosas diferentes ... Creo que podría confundirlas aquí. –

+0

intenté explicar todo con precisión. así que una vez más para ser claro. quiero que compile mi código también me gustaría que ese código no tenga advertencias y no '@ SupressWarning'. Nunca he mencionado nada sobre excepciones. Espero que ayude – piotrek

Respuesta

30

Use la sintaxis cuando doReturn-stubbing alternativo.

sistema bajo prueba:

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

y el caso de prueba:

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

Sin errores o advertencia supresión necesita

+1

feo pero funciona. Odio esta sintaxis por dos razones. legibilidad y el hecho de que estamos completamente renunciados a usar genéricos en absoluto. ¿Es realmente imposible hacerlo con genéricos? – piotrek

+0

Comprendo que no le guste la sintaxis, también prefiero la sintaxis de cuándo y cuándo. No entiendo lo que quieres decir con que es imposible hacerlo con genéricos. –

+0

estoy hablando del parámetro de doReturn. es un objeto no está ligado de ninguna manera al tipo que debe devolverse. no hay verificación de tipos de tiempo de compilación. Sin embargo, si no recibo una respuesta mejor, tomaré esta, porque como he dicho, funciona – piotrek

Cuestiones relacionadas