我有以下设置:
要测试的类:扩展BaseDisplayOption
的SeriesOffset
测试等级:SeriesOffsetTest
当创建SeriesOffset
类的对象来测试它时,该对象的构造函数会进行一个超级调用,然后进行以下方法调用:
logger = LoggingService.getLog(this.getClass());
其中LoggingService
是抽象类,而getLog(Class<?> clazz)
是具有泛型类参数的静态方法。这个方法调用需要被嘲笑。我用一个名为ILogImpl
的类为其创建了一个模拟实现,这就是我尝试测试它的方式:
ILogImpl a = new ILogImpl();
PowerMockito.mockStatic(LoggingService.class);
PowerMockito.when(LoggingService.getLog( SeriesOffset.class)).thenReturn(a);
但是这个方法似乎不起作用,它调用了真实的实现,而不是我需要它调用的模拟实现。错误跟踪如下:错误跟踪
根据错误跟踪,我看不出getLog
的实际实现是在哪里被调用的,但实际的类初始值设定项("clinit")是作为mock创建的一部分被调用的,因为你至少指的是实际的类及其静态字段和static {}
块是像往常一样加载的。
查看LoggingService.java的第41行,如果问题不明显,请编辑您的答案,以便我们可以看到它并进行进一步诊断。