Phương pháp tôi muốn thử nghiệm có một vòng lặp for với logic cho mỗi phần tử trong bList:Mockito ClassCastException
class A {
void someMethod(){
for(B b: bList){
//some logic for b
}
}
}
tôi nhận được một ngoại lệ khi thực hiện kiểm tra sau:
@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();
}
}
Ngoại lệ tôi nhận được là:
java.lang.ClassCastException:
org.mockito.internal.creation.jmock.ClassImposterizer$ClassWithSuperclassToWorkAroundCglibBug$$EnhancerByMockitoWithCGLIB$$ cannot be cast to xyz.B
Có ai gặp phải điều này trước và đưa ra giải pháp thay thế không?
tôi đã tìm kiếm một giải pháp và đã đi qua một số liên kết: http://code.google.com/p/mockito/issues/detail?id=251 và http://code.google.com/p/mockito/issues/detail?id=107
Đây có thể là sự cố hiện có như được chỉ ra trong các liên kết. –
Bạn có thực sự cố gắng giả lập Danh sách và Bản đồ hay chỉ để minh họa vấn đề này? Tại sao bạn không chỉ sử dụng một ArrayList và HashMap thực hiện và tiêm những? – jhericks
@jhericks Có bạn là chính xác, tôi nên chuyển sang sử dụng ArrayList và HashMap thực hiện. Cảm ơn –