我正在使用 Michael Foord 的模拟库,对此有疑问。
我想模拟一个属性,所以我这样做:
eggs = mock.PropertyMock(return_value='eggs')
spam = mock.Mock()
type(spam).eggs = eggs
assert spam.eggs == 'eggs'
这非常有效。但是我发现 type()
部分很难看,我很想做这样的事情:
eggs = mock.PropertyMock(return_value='eggs')
spam = mock.Mock(eggs = eggs)
assert spam.eggs == 'eggs'
最后一个例子没有按预期工作,spam.eggs
变成了方法而不是属性。
我知道我可以使用 mock.Mock(eggs = 'eggs')
所以 eggs
不是一种方法,但我希望能够断言该属性。 :-)
我使用的是 Python 2.7,但我认为 unittest.Mock
也能正常工作。
最佳答案
补丁可以在一定程度上帮助你,代码取自official Mock document
>>> class Foo(object):
... @property
... def foo(self):
... return 'something'
... @foo.setter
... def foo(self, value):
... pass
...
>>> with patch('__main__.Foo.foo', new_callable=PropertyMock) as mock_foo:
... mock_foo.return_value = 'mockity-mock'
... this_foo = Foo()
... print this_foo.foo
... this_foo.foo = 6
...
mockity-mock
>>> mock_foo.mock_calls
[call(), call(6)]
关于Mock 构造函数中的 Python PropertyMock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18404524/