gpt4 book ai didi

java - Powermock 验证非静态方法中的私有(private)静态方法调用

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:29:50 25 4
gpt4 key购买 nike

亲爱的stackoverflow战友们,我在让特定的 PowerMock/Mockito 案例工作时再次遇到问题。 问题是,我需要验证从公共(public)非静态方法调用的私有(private)静态方法的调用。我之前在 How to suppress and verify private static method calls? 上发布的一个类似示例

这是我的代码:

class Factory {

public String factorObject() throws Exception {
String s = "Hello Mary Lou";
checkString(s);
return s;
}

private static void checkString(String s) throws Exception {
throw new Exception();
}
}

这是我的测试类:

@RunWith(PowerMockRunner.class)
@PrepareForTest(Factory.class)
public class Tests extends TestCase {

public void testFactory() throws Exception {

Factory factory = mock(Factory.class);
suppress(method(Factory.class, "checkString", String.class));
String s = factory.factorObject();
verifyPrivate(factory, times(8000)).invoke("checkString", anyString());
}
}

这里的问题是,测试成功了,但它不应该成功。不应该是因为私有(private)静态方法应该恰好被调用 1 次。但无论我在 times() 中输入什么值,它总是会验证它是否为真... halp :(

最佳答案

好吧,我想我找到了答案,但是很头疼。 Rudy 给了我关于使用 spy 的最后提示,但这仍然不是微不足道的(尽管解决方案看起来“简单易行”)。这是完整的解决方案:

import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.times;
import static org.powermock.api.mockito.PowerMockito.verifyPrivate;
import static org.powermock.api.mockito.PowerMockito.doNothing;
import static org.powermock.api.mockito.PowerMockito.spy;

@RunWith(PowerMockRunner.class)
@PrepareForTest(Factory.class)
public class Tests extends TestCase {

public void testFactory() throws Exception {

Factory factorySpy = spy(new Factory());
String s = factorySpy.factorObject();
doNothing().when(factorySpy, "checkString", anyString());
verifyPrivate(factorySpy, times(1)).invoke("checkString", anyString());
}
}

关于java - Powermock 验证非静态方法中的私有(private)静态方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16515809/

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