gpt4 book ai didi

java - PowerMocking 一个新实例

转载 作者:行者123 更新时间:2023-12-01 14:27:47 25 4
gpt4 key购买 nike

在我使用 PowerMock 测试的类中,我有以下类的实例化

EmailMessage msg = new EmailMessage(getExchangeSession());

EmailMessage 是我 mock 的第三方工具,而 getExchangeSession() 是一个继承的 protected 方法。我需要模拟 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 如何模拟这个 protected 方法?

最佳答案

如果您正在测试的类中有这一行:

EmailMessage msg = new EmailMessage(getExchangeSession());

那么你不能通过 powermocking EmailMessage 的构造函数来跳过对 getExchangeSession() 的调用 - 它在调用构造函数之前调用,然后返回值传递给 EmailMessage (无论是真实的还是模拟的)。

因此,如果您无法设置类以使对 getExchangeSession 的调用有效,则需要按照此问题所述模拟该调用:mocking protected method .

关于java - PowerMocking 一个新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17065213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com