我有这个使用 JDK6、Junit3 和 Mockito 1.8.5 的案例(名称已更改以使其易于理解):
public abstract class AbstractProcessorTest<P extends AbstractProcessor<T>, T extends AbstractProcess> {
@Mock(answer = CALLS_REAL_METHODS)
protected P processor;
@Mock(answer = RETURN_DEEP_STUBS)
protected T process;
public void setUp(){
Mockito.initMocks(this);
// some common configurations
processor.setProcess(process);
...
}
}
public class ProcessorTest extends AbstractProcessorTest<Processor, ProcessAlpha>{
@Mock
private Service service;
@Override
public void setUp(){
super.setUp();
doReturn(service).when(processor).getService();
}
public void testAMethod(){
processor.process();
}
}
当我执行 testAMethod() 测试用例时,我得到了这个异常:
java.lang.ClassCastException: org.xyz.AbstractProcessor$$EnhancerByMockitoWithCGLIB$$c948b334 cannot be cast to org.xyz.ProcessorA
当我检查这个方法调用时,它说在类中找不到这个方法。另一个奇怪的事情是我在 AbstractProcessor.setUp() 中调用方法时没有遇到任何异常(但在 ProcessorTest.setUp() 中失败)
这在我创建 AbstractProcessorTest 类之前没有发生,所以我相信这是一些与泛型和 Mockito 代理这些对象的方式相关的东西,我需要改变我的策略。
希望这已经足够清楚了。先感谢您,
塞巴斯.-