这似乎应该很简单,但我在圈子里跑来跑去。
我有:
@Mock
SimpleAbstractCacheWithInputs<Key, Value, Inputs> underlyingCache;
然后我尝试在setup()
:
when(underlyingCache.getOrCreate(usdgbpKey)).thenReturn(usdgbpCfi);
但是这会在getOrCreate()
内抛出一个空指针异常,因为它试图执行真实对象中的实际代码,而不是嘲笑,并且没有设置。
但我不想运行getOrCreate
实际代码,我只想让它返回模拟值!
那么如何在不设置我永远不会用来模拟这个方法调用的underlyingCache
内的所有内容的情况下这样做呢?
答案 0 :(得分:0)
如果您担心间谍或已经存根的对象的行为,我会推荐这种语法,它不依赖于调用模拟对象:
doReturn(usdgbpCfi).when(underlyingCache).getOrCreate(usdgbpKey);
......但这一切似乎都是正确的。如果你正在使用@Mock注释,那么整个对象应该被模拟,或null
如果你忘记了Mockito运行/规则/初始化。
在某些情况下,模拟会失败并且您会获得实际行为:
final
,因为Mockito无法覆盖该方法(通过代理)。final
,那么Mockito就无法覆盖课程(通过代理)。