我试图用模拟的名称创建MagicMock,它似乎不起作用,但适用于其他属性:
from unittest.mock import MagicMock
# Works
assert MagicMock(foo='bar').foo == 'bar'
# Don't work
assert MagicMock(name='bar').name == 'bar'
print(MagicMock(name='bar').name)
<MagicMock name=\'bar.name\' id=\'140031146167376\'>如何用MagicMock模拟name属性?
发布于 2020-06-24 09:45:07
在创建模拟对象时,不能对name属性进行模拟,因为它具有特殊的含义:
名称:如果模拟有一个名称,那么它将用于模拟的回复。这对于调试非常有用。该名称被传播到子模拟。
因此,为了模拟名称,应该在创建mock或MagicMock对象之后并在传递它之前设置它:
mock_obj = MagicMock()
mock_obj.name = 'bar'
assert mock_obj.name == 'bar'
# Passing mock object forward
...发布于 2022-09-23 11:55:08
这个问题被问到已经有一段时间了,但是模拟文件现在明确地提到了这个案例,并提出了两种解决方案。其中之一是在模拟创建后将name属性设置为如另一个答案所示;另一个可能的解决方案是使用configure_mock()
>>> mock = MagicMock()
>>> mock.configure_mock(name='my_name')
>>> mock.name
'my_name'https://stackoverflow.com/questions/62552148
复制相似问题