我需要模拟对象的公共非静态方法。
问题是我不能创建一个模拟对象,因为这个对象是直接在代码中创建的。
我曾尝试使用PowerMockito.spy()和PowerMockito.when(...)来监视类,但它不起作用(可能是因为PowerMockito.when仅适用于静态和私有方法)
例如,假设我需要对此进行测试:
...
myClass anObject = new myClass();
anObject.aMethod();
...
我怎么能模拟调用anObject.aMethod()?
我想我需要监视myClass,但它不起作用..
答案 0 :(得分:1)
使用依赖注入。
在最简单的情况下,只需将工厂对象传递给创建对象的方法,然后监视该工厂。
执行此操作的其他方法是将工厂传递给对象的构造函数。
答案 1 :(得分:1)
最好重构代码以使用依赖注入。
但是快速的谷歌建议您实际上可以在PowerMockito中存根构造函数。请参阅javadoc for whenNew。
我无法保证它,因为我没有使用PowerMockito,但这看起来应该允许你让你的构造函数调用返回一个模拟对象。