如何使用Powermock模拟私有静态内部类

时间:2014-06-24 21:07:22

标签: junit mockito powermock

我是mockito + powermock的新手。我试图模拟一个具有私有静态内部类的类。我正面临ExceptionInInitializerError。有人可以帮我正确初始化课程。

错误:

java.lang.ExceptionInInitializerError
    at sun.reflect.GeneratedSerializationConstructorAccessor9.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    ....................
    ....................
Caused by: java.lang.NullPointerException
    at com.ibm.retail.xpd.pos.messaging.topics.TopicComponentHelper.<init>(TopicComponentHelper.java:10)
    at com.ibm.retail.xpd.pos.messaging.topics.NodePath.<init>(NodePath.java:11)
    at com.ibm.retail.xpd.pos.messaging.service.RetailPlatformService.<init>(RetailPlatformService.java:69)
    at com.tgcs.scrt.gui.components.PageManager$PageControlService.<init>(PageManager.java:216)
    at com.tgcs.scrt.gui.components.PageManager.<clinit>(PageManager.java:242)
    ... 69 more

类看起来像:

public class PageManager{
    .........
    .........
    private static class PageControlService extends PlateFormService{
    .........
    }
}

在测试用例中模拟类:

PowerMockito.mockStatic( PageManager.class );

1 个答案:

答案 0 :(得分:3)

看起来你错过了:

在测试用例的类级别使用@RunWith(PowerMockRunner.class)注释。 在测试用例的类级别使用@PrepareForTest(ClassThatContainsStaticMethod.class)注释。

从:

https://github.com/jayway/powermock/wiki/MockStatic

@Marcin - 这是一个多么可怕的居高临下的答案。您经常需要模拟静态类。例如,在basho的riak客户端中,响应类是一个静态内部类(从他们的POV中,它是有意义的 - 只有客户端应该构建响应)。因此,如果您想模拟客户端返回的内容,则必须模拟静态内部类。

真的厌倦了所有响应单元测试问题的人“不要模拟X”,或“你正在测试的代码是错误的”,只是因为他们不知道答案。