El método Quiero prueba tiene un bucle con la lógica para cada elemento en ListaB:Mockito ClassCastException
class A {
void someMethod(){
for(B b: bList){
//some logic for b
}
}
}
puedo obtener una excepción cuando la ejecución de prueba siguiente:
@RunWith(MockitoJUnitRunner.class)
class ATest {
@Mock
private B b;
@Mock
private Map<Int, List<B>> bMap;
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private List<B> bList;
@Spy
@InjectMocks
private C c;
....
@Test
public void test(){
//this line executes fine
when(bList.size()).thenReturn(1);
//strangely this works fine
when(bMap.get(any())).thenReturn(bList);
//ClassCastException
when(bList.get(0)).thenReturn(b); // or when(bList.get(anyInt())).thenReturn(b);
c.methodIWantToTest();
}
}
La excepción consigo es:
java.lang.ClassCastException:
org.mockito.internal.creation.jmock.ClassImposterizer$ClassWithSuperclassToWorkAroundCglibBug$$EnhancerByMockitoWithCGLIB$$ cannot be cast to xyz.B
¿Alguien ha encontrado esto antes y ha encontrado una solución?
He buscado una solución y he encontrado algunos enlaces: http://code.google.com/p/mockito/issues/detail?id=251 y http://code.google.com/p/mockito/issues/detail?id=107
Puede ser un problema existente como se ha señalado en los enlaces. –
¿Realmente está tratando de burlarse de List and Map o simplemente para ilustrar el problema? ¿Por qué no utiliza una implementación de ArrayList y HashMap e inyecta esos? – jhericks
@jhericks Sí, tiene razón, debería cambiar a la implementación de ArrayList y HashMap. Gracias –