powermockito.when()。thenReturn() - 调用mocked函数

时间:2015-12-07 21:14:38

标签: java powermockito

使用PowerMockito设置包含私有方法ala this的测试。

类别:

public class SomeMod {
    public void somefunc() {
        Logger.debug("somefunc");
        ...
        privFunction(param);
        ...
    }

    private void privFunction(param) {
        Logger.debug("privFunction");
    }
}

测试:

@RunWith(PowerMockRunner.class)
@PrepareForTest({SomeMod.class})
public class somemod_test {
    ...
    @Test public void test0() {
        SomeMod_spy somemod = spy(new SomeMod());
        PowerMockito.when(somemod, "privFunction", "param").thenReturn(someMockedValue);

        ...
        somemod.somefunc();
    }

}

当我运行此命令并在两个Logger.debug语句上设置断点时,我看到privFunctionsomefunc之前被点击。如果我在测试中注释了somemod.somefunc()的来电,则privFunction 仍然被点击。

我做错了什么?

编辑:

我使用了PowerMockito.when().thenReturn()而不是推荐的PowerMockito.doReturn().when()语法,因为前者会抛出NPE和 UnfinishedStubbingException 。这表明我的测试环境设置不正确。不确定在哪里解决此问题。

2 个答案:

答案 0 :(得分:3)

在走一小段路然后重新审视代码之后,问题/答案是模拟 / 间谍调用的关联,以设置{{1} }。

而不是:

doReturn

使用:

spy(new SomeMod())

这将根据文档设置测试。

答案 1 :(得分:2)

您必须使用doReturn()。when()语法来防止模拟方法被调用。这是我所知道的唯一方法。