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