看起来Mockito在需要比较的对象上非常自由地调用equals()
方法。
例如,假设我有一个班级Ring
,myPrecious
就是它的一个实例。此外,已覆盖equals()
方法以进行有意义且深入的比较(这是一个重要的假设)。
当我使用以下Mockito构造时:
doReturn(42).when(mySUT).putsOn(myPrecious);
Mockito将在equals()
上调用自定义深度比较myPrecious
。
说,出于某种原因,我希望Mockito只在被调用的对象确实是myPrecious时才执行doReturn
,而不是equals
它的一些副本。 (
换句话说,我希望doReturn
仅在putsOn
调用==
到myPrecious的对象时才会发生。
有办法吗?
这也适用于其他Mockito构造,例如verify(mySUT).doTask(myPrecious)
,它也会在equals()
上调用myPrecious
。
答案 0 :(得分:1)
当提供论证时,Mockito实际上会使用equals()
。
如果您想记下仅适用于特定对象的调用,则必须使用same()匹配器。
when(mySUT.putsOn(same(myPrecious))).thenReturn(42)
应该确保在进入== myPrecious时会返回42。
除此之外:考虑使用any()
匹配器是否可以替代。
因为可能是一种设计气味,你必须为你的模拟制作这样的规格。含义:通常,一个测试应该测试一个方面。因此:我会回到这里并质疑隐含的要求:为什么你需要这样的规范 - 你的测试代码是否真的需要收到许多不同的结果;取决于进入哪个对象?