我正在使用PowerMockito
和spy
来模拟私有方法:
final SomeClass someClass = new SomeClass();
final SomeClass spy = PowerMockito.spy(someClass);
PowerMickito.doReturn("someValue", spy, "privateMethod1");
final String response = Whitebox.invokeMethod(spy, "anotherPrivateMethod");
// I can now verify `response` is of the correct data
// But I also want to verify `privateMethod1` was called x times or so
我无法弄清楚如何验证我的方法被调用了x次。
旁注
最好只创建我的所有私有方法protected
,然后在我的测试类中扩展该类并执行此操作吗?
答案 0 :(得分:2)
这样做。
PowerMockito.doReturn("someValue", spy, "privateMethod1");
final String response = Whitebox.invokeMethod(spy, "anotherPrivateMethod");
assert(response)
verifyPrivate(spy, times(1)).invoke("anotherPrivateMethod", "xyz");
我假设你的私有方法(anotherPrivateMethod)接受一个参数“xyz”。您可以根据私人方法声明进行修改。
答案 1 :(得分:0)
测试私有方法正在测试实现细节。 如果您选择更改实施,则测试将变得毫无价值,并且将被丢弃。
你应该努力测试什么,而不是如何。然后,即使您更改实施,测试也将继续存在。
可以找到关于如何避免测试附带细节的精彩论文here。