当'equals`被覆盖时,Mockito可以检查参考/浅层相等吗?

时间:2017-06-29 04:09:07

标签: mocking mockito

看起来Mockito在需要比较的对象上非常自由地调用equals()方法。

例如,假设我有一个班级RingmyPrecious就是它的一个实例。此外,已覆盖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

1 个答案:

答案 0 :(得分:1)

当提供论证时,Mockito实际上会使用equals()

如果您想记下仅适用于特定对象的调用,则必须使用same()匹配器。

when(mySUT.putsOn(same(myPrecious))).thenReturn(42)

应该确保在进入== myPrecious时会返回42。

除此之外:考虑使用any()匹配器是否可以替代。

因为可能是一种设计气味,你必须为你的模拟制作这样的规格。含义:通常,一个测试应该测试一个方面。因此:我会回到这里并质疑隐含的要求:为什么你需要这样的规范 - 你的测试代码是否真的需要收到许多不同的结果;取决于进入哪个对象?