Tomasz Nurkiewicz 的回答似乎并不能说明整个故事!
注意 Mockito 版本:1.10.19。
我是一个 Mockito 新手,所以无法解释以下行为:如果有专家可以改进这个答案,请随意。
这里讨论的方法getContentStringValue
, 是NOT final
和NOT 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 都说两者都是 return 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 大祭司解释一下……
*“通用参数”是正确的术语吗?