欲測試的方法,具有用於與邏輯迴路,用於在bList每個元素:的Mockito ClassCastException異常
@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();
}
}
異常我得到:
class A {
void someMethod(){
for(B b: bList){
//some logic for b
}
}
}
執行以下測試時我得到一個異常是:
java.lang.ClassCastException:
org.mockito.internal.creation.jmock.ClassImposterizer$ClassWithSuperclassToWorkAroundCglibBug$$EnhancerByMockitoWithCGLIB$$ cannot be cast to xyz.B
有沒有人遇到過這個問題,並提出一個解決方法?
...我已經尋找一個解決方案和所遇到的一些鏈接: http://code.google.com/p/mockito/issues/detail?id=251 和 http://code.google.com/p/mockito/issues/detail?id=107
這可能是一個現有的問題,如鏈接所指出的。 – 2012-04-25 22:31:47
你真的試圖嘲笑列表和地圖,或者只是爲了說明這個問題嗎?你爲什麼不使用ArrayList和HashMap實現並注入它們? – jhericks 2012-04-26 01:14:35
@jhericks是的你是對的,我應該切換到使用ArrayList和HashMap實現。謝謝 – 2012-04-26 14:09:44