【问题标题】:Mock private method with Mockito and PowerMock使用 Mockito 和 PowerMock 模拟私有方法
【发布时间】:2013-06-13 15:45:29
【问题描述】:

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

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

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

【问题讨论】:

  • 你把@PrepareForTest(BalanceResponseGenerator.class) 放在你的TestClass上面了吗?
  • 是的,我当然做到了/

标签: java mocking mockito powermock


【解决方案1】:

我猜问题是你的 when 调用是在 Mockito.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");
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 2012-05-18
    • 2013-01-06
    • 2018-10-19
    • 2014-02-03
    • 2015-11-04
    • 2015-12-13
    相关资源
    最近更新 更多