Mock 构造函数中的 Python PropertyMock

标签 python unit-testing mocking

我正在使用 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/

相关文章:

java - 覆盖不起作用

node.js - Node JS : How can I create a fake tcp socket for testing servers

python - 使用字典更新 Pandas 数据框或 csv

python - 如何在单元测试的类方法中模拟 python 的 datetime.now()?

ruby-on-rails - 如何比较rspec中的数组

java - AppContext 中具有相同名称和相同类的两个 bean(其中一个被 mock )

Python - socketio 导入错误

Python:随机混合两个列表

python - 在Python中调用上下文管理器

javascript - 单元测试时刻日期 - 内存地址问题?