Mock constru中的Python PropertyMock

2024-09-27 07:34:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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不是一个方法,但我希望能够断言该属性。:-)


我正在使用Python2.7,但我假设unittest.Mock也可以工作。


Tags: 方法示例return属性valuetypeassertspam
1条回答
网友
1楼 · 发布于 2024-09-27 07:34:26

补丁可以在一定程度上帮助您,代码取自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)]

相关问题 更多 >

    热门问题