当使用python mox模拟对象时,有什么办法可以避免它们全部相等(如在__eq__中)?

时间:2014-10-10 13:20:11

标签: python unit-testing mox pymox

虽然它们是不同的对象(至少{{},但我遇到了一些事实,这些问题来自于某个给定类的所有mox Mock对象在==__eq__意义上似乎相等。 {1}}返回mock1 is mock2)。有没有办法阻止这种行为?

在下面的代码示例中,您可以看到计数错误,因为它认为所有模拟都是相同的:

False

1 个答案:

答案 0 :(得分:0)

__eq__mox.MockAnything的{​​{1}}的实现似乎只是比较mox.MockObjectreplay_mode所以任何期望相同的模拟对象电话实际上是#34;相等"。

expected_calls_queue

当在集合中使用模拟class MockAnything: def __eq__(self, rhs): """Provide custom logic to compare objects.""" return (isinstance(rhs, MockAnything) and self._replay_mode == rhs._replay_mode and self._expected_calls_queue == rhs._expected_calls_queue) 等方法时,这会产生一些影响。

您必须添加一些假方法的调用,以使list.remove()眼中的模拟不相等。