当使用python-mox-mock对象时,有没有任何方法可以避免所有对象相等(如__eq__)



我遇到了一些问题,这些问题源于一个给定类的几个全mox Mock对象在==__eq__意义上似乎是相等的,尽管它们是不同的对象(至少mock1 is mock2返回False)。有什么办法可以防止这种行为吗?

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

import mox
class MyClass(object):
    pass
real1 = MyClass()
real2 = MyClass()
listreal = (real1, real2)
mocker = mox.Mox()
mock1 = mocker.CreateMock(MyClass)
mock2 = mocker.CreateMock(MyClass)
listmock = (mock1, mock2)
real1 == real2  # False
real1 is real2  # False
listreal.count(real1)  # 1
mock1 == mock2  # True
mock1 is mock2  # False
listmock.count(mock1)  # 2

mox.MockAnythingmox.MockObject__eq__的实现似乎只是比较了replay_modeexpected_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)

当mock用于list.remove()等方法的集合时,这有几个含义。

您必须添加一些对fake方法的调用,以使mock在__eq__眼中不相等。

相关内容

  • 没有找到相关文章