gpt4 book ai didi

java - 使用 powermockito 验证静态 void 方法的调用

转载 作者:搜寻专家 更新时间:2023-10-31 19:46:12 25 4
gpt4 key购买 nike

我正在 try catch 静态类中的“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)); 而它仍然通过。我该如何测试?

最佳答案

您在 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)

关于java - 使用 powermockito 验证静态 void 方法的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22180773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com