我是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 );
答案 0 :(得分:3)
看起来你错过了:
在测试用例的类级别使用@RunWith(PowerMockRunner.class)注释。 在测试用例的类级别使用@PrepareForTest(ClassThatContainsStaticMethod.class)注释。
从:
https://github.com/jayway/powermock/wiki/MockStatic
@Marcin - 这是一个多么可怕的居高临下的答案。您经常需要模拟静态类。例如,在basho的riak客户端中,响应类是一个静态内部类(从他们的POV中,它是有意义的 - 只有客户端应该构建响应)。因此,如果您想模拟客户端返回的内容,则必须模拟静态内部类。
真的厌倦了所有响应单元测试问题的人“不要模拟X”,或“你正在测试的代码是错误的”,只是因为他们不知道答案。