我有一行代码:
if not hasattr(class.a, u'c'):
return
Run Code Online (Sandbox Code Playgroud)
如何模拟类,以便class.ac为hasattr返回False?
如果我这样做:
>>> from mock import MagicMock
>>> mock_class = MagicMock(spec=[u'a'])
>>> hasattr(mock_class, u'a')
True
>>> hasattr(mock_class, u'b')
False
>>> hasattr(mock_class.a, u'c')
True
Run Code Online (Sandbox Code Playgroud)
虽然我没有指定class.ac,但它被嘲笑!
小智 6
实际上mock_class.a会创建另一个没有规格的MagicMock.我能想到的唯一的办法就是属性指定a的mock_class与规范,这样其他MagicMock:
mock_class = MagicMock(spec=[u'a'])
mock_class.a = MagicMock(spec=[u'a'])
hasattr(mock_class.a, u'c') # returns False
Run Code Online (Sandbox Code Playgroud)
此外,如果您想要模拟一些真实对象,则可以进行一些递归自动调整.
您可以删除该属性,这将导致hasattr返回False。
来自文档:
>>> mock = MagicMock()
>>> hasattr(mock, 'm')
True
>>> del mock.m
>>> hasattr(mock, 'm')
False
>>> del mock.f
>>> mock.f
Traceback (most recent call last):
...
AttributeError: f
Run Code Online (Sandbox Code Playgroud)
对于您的具体示例,由于mock_class.a是另一个模拟,因此您可以执行del mock_class.a.c.
| 归档时间: |
|
| 查看次数: |
2135 次 |
| 最近记录: |