我想在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");
}
安装方法的最后一行调用Example
实例上的方法,这个实例没有通过构造函数获得一个MyHello
,所以我在setup方法中得到了一个NPE。
是否有一种方法可以在创建模拟的同时注入MyHello
,或者不允许Mockito在实际实例上调用该方法?
编辑
导致观察到的行为的问题是,doSomething()
方法实际上是final
__。当我试图解决这个问题时,我忽略了这一点。https://stackoverflow.com/a/3794448/105224。所以我要么取消期末考试,要么为那堂课提取一个界面。
发布于 2012-11-20 03:50:16
看看使用doReturn("dummy").when(example).doSomething()
是否有效果。
来自JavaDoc:
在一些罕见的情况下使用doReturn(),当您不能使用时(对象)。请注意,始终建议何时(Object)进行阻塞,因为它是参数类型安全且更具可读性的(特别是在阻塞连续调用时)。 下面是doReturn()派上用场的罕见场合:
发布于 2012-11-20 05:33:49
https://stackoverflow.com/questions/13472392
复制