我想在 TestNG 测试用例中模拟一个具体的类。该类可能如下所示(简化示例):
public class Example() {
private MyHello myHello;
public Example(MyHello myHello) {
this.myHello = myHello;
}
public String doSomething() {
return myHello.doSomethingElse();
}
}
现在我们要模拟Example
返回一些定义的值:
@BeforeMethod
public void setUp() {
this.example = mock(Example.class);
when(this.example.doSomething()).thenReturn("dummyValue");
}
这看起来很不错,但实际上并非如此。setup 方法的最后一行调用 的实例上的方法Example
,这个实例没有MyHello
通过构造函数得到一个,所以我在 setUp 方法中得到一个 NPE。
有没有办法在创建模拟时注入或禁止 Mockito 在真实实例MyHello
上调用该方法?
编辑
导致观察到的行为的问题是,该doSomething()
方法实际上是final
. 当我试图解决这个问题时,我忽略了这一点。无论如何,这是 mockito 的一个已知限制。所以我要么删除final,要么为那个类提取一个接口。