我正在尝试模拟如下所示的课程
public class MessageContainer {
private final MessageChain[] messages;
MessageContainer(final int numOfMessages, final MessageManagerImpl manager, final Object someOtherStuff) {
messages = new MessageChain[numOfMessages]
// do other stuff
}
public void foo(final int index) {
// do something
messages[index] = getActiveMessage();
}
}
我的测试代码如下:
@Test
public void testFoo() {
MessageContainer messageContainer = Mockito.mock(MessageContainer.class);
Mockito.doCallRealMethod().when(messageContainer).foo(anyIndex);
}
我得到了 NullPointerException,因为 'messages' 为空。我尝试使用@InjectMocks 注入模拟,但是不支持这种情况,因为并非构造函数的每个参数都被声明为成员。
我还尝试使用 WhiteBox 设置“消息”字段
Whitebox.setInternalState(messageContainer, MessageChain[].class, PowerMockito.mock(MessageChain[].class));
但我得到了一个编译错误,因为 setInternalState 只支持 (Object, Object, Object) 而不是 Object[]。
有没有可能模拟私有最终字段的方法?
提前谢谢你们。