使用泛型参数模拟静态方法

时间:2015-03-28 19:58:02

标签: java mocking mockito powermock powermockito

我有以下设置:

要测试的类:SeriesOffset扩展BaseDisplayOption

测试班: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);

但是这种方法似乎不起作用,它调用真正的实现而不是我需要它调用的模拟实现。 错误跟踪如下:error trace

1 个答案:

答案 0 :(得分:0)

根据错误跟踪,我不知道你的getLog的实际实现在哪里被调用 - 但是真正的类初始化器(&#34; clinit&#34;)是< / em>被称为模拟创建的一部分,因为您至少引用了实际的类,并且其静态字段和static {}块正常加载。

查看LoggingService.java的第41行,如果问题不明显,请编辑您的答案,以便我们可以看到并进一步诊断。