Tomasz Nurkiewicz的回答似乎并没有说出整个故事!
NB Mockito版本:1.10.19。
我是一个Mockito newb,所以不能解释以下行为:如果有专家在那里谁可以改善这个答案,请随时。
问题的方法在这里,getContentStringValue
,是不final
和不static
。
此行确实调用原始的方法getContentStringValue
:
doReturn("dummy").when(im).getContentStringValue(anyInt(), isA(ScoreDoc.class));
此行不调用原始的方法getContentStringValue
:
doReturn("dummy").when(im).getContentStringValue(anyInt(), any(ScoreDoc.class));
因我所不能回答的原因,使用isA()
会导致doReturn
的预期(?)“不呼叫方法”行为失败。我们来看看这里涉及的方法签名:它们都是static
方法Matchers
。 Javadoc说这两个都会返回null
,这本身有点难以理解。假设检查参数时传递Class
对象,但结果要么从未计算或丢弃。鉴于null
可以代表任何类别,并且您希望不要调用模拟方法,所以isA(...)
和any(...)
的签名不会返回null
而不是通用参数* <T>
?
总之:
public static <T> T isA(java.lang.Class<T> clazz)
public static <T> T any(java.lang.Class<T> clazz)
API文档没有给出这方面有任何的线索。它似乎也表示,对这种“不称呼方法”行为的需求是“非常罕见的”。我个人一直使用这种技术:通常我发现嘲笑涉及到几个“设置场景”的行......然后调用一个方法,然后在你已经上演的模拟上下文中“播放”场景...而当你设置风景和道具时,你想要的最后一件事是让演员进入舞台左侧并开始表演他们的心...
但是这超出了我的薪酬等级..我邀请任何经过Mockito的高级牧师的解释......
*是“通用参数”的正确名词吗?
如果我用这个方法和我原来的一个还是日渐叫什么名字?可以有我通过的参数有问题吗?这里是整个测试: http://pastebin.com/ZieY790P 如果您的原始方法仍然被调用,则可能是因为您的原始方法是final的,所以'send'方法被称为 – 2014-08-21 15:02:49
@EvgeniPetrov。 Mockito不会嘲笑最终方法,也不能警告你最终方法的嘲讽。 – MarcG 2014-12-08 21:01:31
dothrow()也可以吗? – Gobliins 2015-01-23 13:17:09