替换非静态方法java mock

时间:2011-02-02 12:29:41

标签: java methods mocking replace spy

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

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

我曾尝试使用PowerMockito.spy()和PowerMockito.when(...)来监视类,但它不起作用(可能是因为PowerMockito.when仅适用于静态和私有方法)

例如,假设我需要对此进行测试:

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

我怎么能模拟调用anObject.aMethod()?

我想我需要监视myClass,但它不起作用..

2 个答案:

答案 0 :(得分:1)

使用依赖注入。

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

执行此操作的其他方法是将工厂传递给对象的构造函数。

答案 1 :(得分:1)

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

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

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