java - 使用 Mockito 和 PowerMock 模拟私有(private)方法

标签 java mocking mockito powermock

我正在尝试像这样使用 PowerMock 模拟私有(private)方法

BalanceResponseGenerator balanceResponseGenerator = spy(new BalanceResponseGenerator());
when(balanceResponseGenerator, "getBalance",client.getParent(), request.getTerminal().getRetailPoint().getRetailNetwork(), result).thenReturn(new Balance());

但是调用的是真正的方法,为什么会这样呢?怎么了?我看到了几个例子,但它们都不适合我。请解释一下!

最佳答案

我猜问题是你在 Mockito.when(..) 上调用了 when 调用。 PowerMockito.when(..)

documentation 给出了正确的示例

@RunWith(PowerMockRunner.class)
// We prepare PartialMockClass for test because it's final or we need to mock private or static methods
@PrepareForTest(PartialMockClass.class)
public class YourTestCase {
    @Test
    public void privatePartialMockingWithPowerMock() {        
        PartialMockClass classUnderTest = PowerMockito.spy(new PartialMockClass());

        // use PowerMockito to set up your expectation
        PowerMockito.doReturn(value).when(classUnderTest, "methodToMock", "parameter1");

        // execute your test
        classUnderTest.execute();

        // Use PowerMockito.verify() to verify result
        PowerMockito.verifyPrivate(classUnderTest, times(2)).invoke("methodToMock", "parameter1");
    }
}

关于java - 使用 Mockito 和 PowerMock 模拟私有(private)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17091412/

相关文章:

php - 如何在 PHP Mockery 中执行 hasKeys() 或创建自定义参数期望?

java - GWT 2.7 资源是通过 ClassLoader 找到的。它应该通过 .gwt.xml 中的 <source/> 或 <resource/> 条目进行注册

c# - 我应该为以下示例使用模拟吗

java - 执行器服务: How it acts as watchdog for thread-pools?

python - 用于测试的临时 ftp 服务器

java - 使用 Mockito 模拟 spring 存储库删除时无法应用

java - 使用 Mockito 的 When 方法发出问题

java - Mockito 模拟一个具有不相关静态方法的类

java - 用于分页 SELECT sql 查询的通用查看器

java - 从文件中读取特定页面