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
失败。
让我们看一下这里涉及的方法签名:它们都是的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大祭司讲解...
*“通用参数”是否正确?