【问题标题】:How to mock `name` attribute with unittest.mock.MagicMock or Mock classes?如何使用 unittest.mock.MagicMock 或 Mock 类模拟“名称”属性?
【发布时间】:2020-06-24 09:45:07
【问题描述】:

我正在尝试使用模拟名称创建 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 属性?

【问题讨论】:

    标签: python unit-testing mocking


    【解决方案1】:

    在创建模拟对象期间不能模拟名称属性,因为它具有特殊含义:

    name:如果 mock 有名称,那么它将在 mock 的 repr 中使用。这对于调试很有用。该名称会传播到子模拟。

    Python Documentation of Mock

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

    mock_obj = MagicMock()
    mock_obj.name = 'bar'
    
    assert mock_obj.name == 'bar'
    
    # Passing mock object forward
    ...
    

    【讨论】:

      猜你喜欢
      • 2012-08-12
      • 1970-01-01
      • 1970-01-01
      • 2020-12-20
      • 2011-01-31
      • 1970-01-01
      • 1970-01-01
      • 2021-01-07
      • 1970-01-01
      相关资源
      最近更新 更多