【问题标题】:Verifying a call of a static void method with powermockito使用 powermockito 验证静态 void 方法的调用
【发布时间】:2014-03-04 19:09:09
【问题描述】:

我正在尝试在静态类中捕获“logError”方法(在每个方法/字段都是静态的意义上),并验证它是否已被同一类中的其他方法调用了多次。

这个方法是:

public static void logError(Object message){
    LOGGER.error(message); // static logger
}

我尝试测试它:

@Test
public void errLogTest() throws Exception{
    PowerMockito.mockStatic(X.class);
    PowerMockito.doNothing().when(X.class);
    X.logError(Mockito.anyString());
    X.open();
    X.open(); //should log error for opening twice
    PowerMockito.verifyStatic(Mockito.times(1));
}

我的问题是,无论我指定多少次,它都会通过。我删除了模拟行为,并且知道记录器被调用一次,但我可以使用PowerMockito.verifyStatic(Mockito.times(9001));,它仍然通过。我该如何测试?

【问题讨论】:

    标签: java unit-testing junit mockito powermock


    【解决方案1】:

    verifyStatic 之后缺少一行代码。您没有告诉 PowerMock 什么 进行验证。您还模拟了该类的 所有 静态方法,而不仅仅是您不想调用的方法。

    @Test
    public void errLogTest() throws Exception{
        PowerMockito.spy(X.class); //Used to be: PowerMockito.mockStatic(X.class);
        PowerMockito.doNothing().when(X.class);
        X.logError(Mockito.anyString());
        X.open();
        X.open(); //should log error for opening twice
        PowerMockito.verifyStatic(Mockito.times(1));
        X.logError(Mockito.anyString()); //Now verifyStatic knows what to verify.
    }
    

    您可能仍需要进行一些调试,因为根据我的经验,设置期望有时会调用底层方法。

    这是 spy 的 javadoc:http://static.javadoc.io/org.powermock/powermock-api-mockito/1.5.4/org/powermock/api/mockito/PowerMockito.html#spy(java.lang.Class)

    这是 verifyStatic 的 javadoc:http://static.javadoc.io/org.powermock/powermock-api-mockito/1.5.4/org/powermock/api/mockito/PowerMockito.html#verifyStatic(org.mockito.verification.VerificationMode)

    【讨论】:

    • 完成。我没有使用最新版本,因为我没有重新测试过。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-30
    • 1970-01-01
    • 1970-01-01
    • 2015-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多