如何在unittest.mock
中设置模拟功能的__name__
属性?
我做了以下事情:
func = Mock(name="foo")
print(func.__name__)
发出AttributeError: __name__
我还尝试创建一个具有__name__
属性的自定义对象,并将其传递给spec为:
class f_mock:
def __init__(self,name):
self.__name__ = str(name)
fobj = f_mock("foo")
func = Mock(spec=fobj)
print(func.__name__)
会发出TypeError: __name__ must be set to a string object
答案 0 :(得分:2)
尝试一下:
mock = MagicMock()
mock.configure_mock(name='my_name')
print(mock.name)
'my_name'
答案 1 :(得分:0)
为什么不直接在模拟游戏中设置__name__
?
func = Mock()
func.__name__ = 'foo'
print(func.__name__)
正如Ghassen在回答中提到的那样,您也可以使用configure_mock
,它在所有意图和目的上都可以实现相同的目的,但是如果您要批量配置模拟的多个属性和/或属性,则可能更可取实例,因为您可以将所有内容放入字典中,并将其解压缩为函数参数。例如,
my_config = {'__name__': 'foo', 'other_property': 'bar'}
mock.configure_mock(**my_config)
再次,根据您的双重考试目的是什么,我建议您使用最简单的解决方案即可达到目标。