【发布时间】:2013-05-13 06:12:45
【问题描述】:
亲爱的 stackoverflow 同志们, 我在让特定的 PowerMock / Mockito 案例工作时再次遇到问题。 问题是,我需要验证私有静态方法的调用,该方法是从公共非静态方法调用的。我之前在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());
}
}
这里的问题是,测试成功了,但它不应该成功。这不应该是因为私有静态方法应该被准确地调用 1 次。但是无论我在 times() 中输入什么值,它总是会验证它是否为真...... halp :(
【问题讨论】:
-
您不应该真正测试
private方法。这将您的单元测试与导致痛苦的实现紧密结合。为什么不检查class是否在应该抛出Exception时? -
基本上你是对的,但不幸的是,在我的 real 项目中,抛出异常的方式和时间隐藏在封闭代码中。这就是为什么我要进行压制行为。我只需要验证对它的调用。
标签: java mockito powermock non-static