替换非静态方法java模拟

替换非静态方法java模拟

问题描述:

我需要模拟对象的公共非静态方法。替换非静态方法java模拟

问题是我不能创建一个模拟对象,因为这个对象是直接在代码中创建的。

我曾尝试使用间谍PowerMockito.spy()和PowerMockito.when(...)的类,但它没有工作(也许它因为PowerMockito.when只适用于静态和私有方法)

例如,假设我需要测试:

... myClass anObject = new myClass(); anObject.aMethod();
...

我怎么能嘲笑调用anObject.aMethod()?

我想我需要去窥探myClass的,但它没有工作..

使用依赖注入。

在最简单的情况下,只需将工厂对象传递给创建对象的方法,然后监视该工厂。

这样做的其他方法是将工厂传递给对象的构造函数。

最好重构代码以使用依赖注入。

但一个快速的谷歌建议你可以在PowerMockito中实际存根构造函数。请参阅javadoc for whenNew

我不能担保它,因为我没有使用PowerMockito,但这看起来应该允许你让你的构造函数调用返回一个模拟对象。