使用PowerMockito测试JavaEWSAPI中的Pull订阅

使用PowerMockito测试JavaEWSAPI中的Pull订阅,java,mocking,exchange-server,exchangewebservices,ewsjavaapi,Java,Mocking,Exchange Server,Exchangewebservices,Ewsjavaapi,我有一个函数,用于处理通过对Microsoft Exchange的PullSubscription获得的事件 public void processEvents(ExchangeService service, PullSubscription subscription) throws Exception { GetEventsResults events = subscription.getEvents(); // Loop through all it

我有一个函数,用于处理通过对Microsoft Exchange的PullSubscription获得的事件

public void processEvents(ExchangeService service, PullSubscription subscription)
            throws Exception {
    GetEventsResults events = subscription.getEvents();
    // Loop through all item-related events.
    for (ItemEvent itemEvent : events.getItemEvents()) {
        if (itemEvent.getEventType() == EventType.NewMail) {
            EmailMessage message = EmailMessage.bind(service, itemEvent.getItemId());
            EmailParser emailParser = new EmailParser();
            emailParser.parse(message, service);
        }
    }
}
我尝试使用PowerMockito测试它,因为ExchangeService是最后一个类。 因此,我对ExchangeService和PullSubscription进行了如下模拟:

ExchangeService serviceMock = PowerMockito.mock(ExchangeService.class);
PullSubscription subscriptionMock = PowerMockito.mock(PullSubscription.class);

@Test
public void startPullNotification() throws Exception {
    ProcessEmails pr = new ProcessEmails("config.properties");
    pr.startPullNotification(serviceMock);
}
当我尝试使用以下代码测试它时,它会抛出一个NullPointerException,因为subscription.getEvents返回null,即subscriptionMock中没有事件

我试图通过模拟必须返回的eventResults来删除它:

when(subscriptionMock.getEvents()).thenReturn(eventResultsMock);
它不起作用,因为测试函数中没有调用getEvents。我想知道如何测试这个函数

解决方案:

我必须模拟函数中创建的每个对象。 另外,我必须在类声明上面添加以下内容

@RunWith(PowerMockRunner.class)
@PrepareForTest({ ClassBeingTested.class })