首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用python mox mock对象时,有没有办法避免它们都是相等的(就像在__eq__中一样)?

在使用python mox mock对象时,有没有办法避免它们都是相等的(就像在__eq__中一样)?
EN

Stack Overflow用户
提问于 2014-10-10 21:20:11
回答 1查看 177关注 0票数 0

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

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

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2014-10-13 01:56:16

代码语言:javascript
复制
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__的眼里不相等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26300442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档