Tomasz Nurkiewicz 的回答似乎并不能说明全部情况!
NB 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 的预期(?)“不调用方法”行为失败。
我们来看看这里涉及到的方法签名:它们都是Matchers的static方法。 Javadoc 都说两者都返回null,这本身就有点难以理解。可能会检查作为参数传递的Class 对象,但结果要么从未计算过,要么被丢弃。鉴于null 可以代表任何类并且您希望不调用模拟方法,isA( ... ) 和any( ... ) 的签名不能只返回null 而不是通用参数* @987654338 @?
无论如何:
public static <T> T isA(java.lang.Class<T> clazz)
public static <T> T any(java.lang.Class<T> clazz)
API 文档对此没有提供任何线索。似乎也说需要这种“不调用方法”行为是“非常罕见的”。我个人一直使用这种技术:通常我发现模拟涉及“设置场景”的几行......然后调用一个方法,然后在模拟中“播放”场景你已经上演的背景......当你设置场景和道具时,你最不想要的就是让演员从左边进入舞台并开始表演他们的心......
但这远远超出了我的工资等级...我请任何路过的 Mockito 大祭司解释...
* 是“通用参数”的正确术语吗?