【发布时间】: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