В классе, который я тестирую с помощью PowerMock, у меня есть следующий экземпляр класса
EmailMessage msg = new EmailMessage(getExchangeSession());
EmailMessage
— это сторонний инструмент, над которым я издеваюсь, а getExchangeSession()
— унаследованный защищенный метод. Мне нужно издеваться над EmailMessage
, но меня действительно не волнует вызов getExchangeSession()
.
На данный момент у меня есть следующее, но метод getExchangeSession()
все еще вызывается:
@RunWith(PowerMockRunner.class)
@PrepareForTest({EmailProvider.class, ExchangeService.class})
public class MyTest {
@Test
public void test() {
EmailMessage emailMessage = createMock(EmailMessage.class);
ExchangeService exchangeService = createMock(ExchangeService.class);
expectNew(EmailMessage.class, exchangeService).andReturn(emailMessage);
// test setup and call to the class under test
Email email = new Email();
new EmailProvider().send(email);
}
}
public class EmailProvider() extends ClassWithProtectedAccess {
public void send(Email email) {
EmailMessage msg = new EmailMessage(getExchangeSession());
// and here follows the code that I am actually testing
// and which works on the msg (EmailMessage)
// ...
}
}
Первая строка EmailProvider.send() — это то, что запускает getExchangeSession()
и затем дает сбой.
Так что, по-видимому, я не могу пропустить вызов getExchangeSession()
, и мне, вероятно, следует также издеваться над этим методом. Это правильно? И если это так, используя PowerMock с EasyMock, как я могу издеваться над этим защищенным методом?