【问题标题】:MagicMock and wrapMagicMock 和 wrap
【发布时间】:2017-09-12 17:27:18
【问题描述】:

为什么 MagicMock 对象的“wraps”关键字不能始终如一地工作?普通方法被传递给被包装的对象,但不是“特殊”方法。在下面的测试中,第一个断言通过,第二个失败。

import mock
import unittest


class Foo(object):
    def bar(self):
        return 1

    def __len__(self):
        return 3


class TestWrap(unittest.TestCase):
    def test(self):
        foo = Foo()
        c = mock.MagicMock(wraps=foo)
        assert c.bar() == 1 # Passes
        assert len(c) == 3 # Fails

我在文档中找不到任何暗示这一点的内容。我错过了什么吗?

【问题讨论】:

  • 由于 MagicMock 模拟所有魔术方法,它可能会破坏您的 len 方法。尝试使用 Mock。
  • 这就是我问题的重点。 MagicMock 不会破坏 bar 方法,那么为什么它会破坏 __len__ 呢?此外,如果您想模拟其他魔术方法,则不能使用 Mock。
  • len(c)什么时候回来?
  • 什么时候 len(c) 返回?我不知道该怎么回答。如果您的意思是“len(c) 返回什么?”那么答案是 0。

标签: python mocking python-unittest magicmock


【解决方案1】:

由于查找魔术方法与普通方法 [1] 不同,因此已专门实现了此支持

wraps 功能似乎没有为您包装 __len__ 方法,您必须手动完成。

【讨论】:

  • 链接已损坏。
猜你喜欢
  • 2017-08-30
  • 1970-01-01
  • 2019-07-18
  • 2016-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多