我遇到了一些问题,这些问题源于这样一个事实:给定类的几个所有mox模拟对象在==,__eq__意义上似乎是相等的,尽管它们是不同的对象(至少mock1 is mock2返回False)。有什么方法可以防止这种行为吗?
在下面的代码示例中,您可以看到计数是错误的,因为它认为所有的mock都是相等的:
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发布于 2014-10-13 01:56:16
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()等方法的集合中时,这有几个含义。
您必须向伪方法添加一些调用,以使模拟在__eq__的眼里不相等。
https://stackoverflow.com/questions/26300442
复制相似问题