首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用unittest.mock.MagicMock或模拟类来模拟` `name`‘属性?

如何使用unittest.mock.MagicMock或模拟类来模拟` `name`‘属性?
EN

Stack Overflow用户
提问于 2020-06-24 09:45:07
回答 2查看 4.5K关注 0票数 11

我试图用模拟的名称创建MagicMock,它似乎不起作用,但适用于其他属性:

代码语言:javascript
复制
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属性?

EN

回答 2

Stack Overflow用户

发布于 2020-06-24 09:45:07

在创建模拟对象时,不能对name属性进行模拟,因为它具有特殊的含义:

名称:如果模拟有一个名称,那么它将用于模拟的回复。这对于调试非常有用。该名称被传播到子模拟。

Mock的Python文档

因此,为了模拟名称,应该在创建mock或MagicMock对象之后并在传递它之前设置它:

代码语言:javascript
复制
mock_obj = MagicMock()
mock_obj.name = 'bar'

assert mock_obj.name == 'bar'

# Passing mock object forward
...
票数 16
EN

Stack Overflow用户

发布于 2022-09-23 11:55:08

这个问题被问到已经有一段时间了,但是模拟文件现在明确地提到了这个案例,并提出了两种解决方案。其中之一是在模拟创建后将name属性设置为如另一个答案所示;另一个可能的解决方案是使用configure_mock()

代码语言:javascript
复制
>>> mock = MagicMock()
>>> mock.configure_mock(name='my_name')
>>> mock.name
'my_name'
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62552148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档