权力嘲笑私人存根嘟嘟错误



我试图制作一个简单的示例,可以在官方PowerMock的页面上找到(这里)。我正在对这个类进行部分模拟:

public class Simple {

    public String doMe() {
        return privateMethod();
    }
    private String privateMethod() {
       return "POWERMOCK sucks";
    }
}

并写了一个简单的测试类:

@RunWith(PowerMockRunner.class)
@PrepareForTest(Simple.class)
public class ProcessorTest  {
    @Test
    public void doMe() throws Exception {
        Simple spy = PowerMockito.spy(new Simple());
        PowerMockito.doReturn("hello").when(spy, "privateMethod");
        String res = spy.doMe();
        PowerMockito.verifyPrivate(spy, Mockito.times(1000)).invoke(
                "privateMethod");
        Assert.assertEquals( res, "hello");
    }

}

但结果是这样的:

java.lang.AssertionError: expected [hello] but found [null]
Expected :hello
Actual   :null
 <Click to see difference>

    at org.testng.Assert.fail(Assert.java:94)

因此,Powermock 不仅无法模拟privateMethod并返回"null",而且当它不是时,它被调用了 1000 次是可以的。

如果我试图搞砸这样的嘲笑,它会变得更加令人毛骨悚然:

PowerMockito.doReturn(1).when(spy, "privateMethod");

所以我正在尝试从privateMethod返回一个整数而不是字符串。然后我得到这个:

org.mockito.exceptions.misusing.WrongTypeOfReturnValue: 
Integer cannot be returned by doMe()
doMe() should return String
***

因此,出于某种原因,Powermock试图嘲笑公共doMe方法。

有人明白什么是幸福吗?我没有。

谢谢。

我的环境是:

Java 1.8, Mockito 1.10.19, Powermock 1.6.2

好的,我找到了解决方案,问题是 JUnit 的@RunWith实际上并没有解决问题,所以我不得不从 PowerMockTestCase 扩展才能使其工作。测试现在看起来像这样,它就像一个魅力:

@PrepareForTest(Simple.class)
public class ProcessorTest extends PowerMockTestCase {
    @Test
    public void doMe() throws Exception {
        Simple spy = PowerMockito.spy(new Simple());
        PowerMockito.doReturn("hello").when(spy, "privateMethod");
        String res = spy.doMe();
        PowerMockito.verifyPrivate(spy, Mockito.times(1)).invoke(
                "privateMethod");
        Assert.assertEquals( res, "hello");
    }
}

相关内容

  • 没有找到相关文章

最新更新