如何创建具有函数特殊(dunder)属性的 Mock
How to create a Mock which has functions' special (dunder) attributes
我有一些使用函数作为参数的代码,我添加了一些包含 __qualname__
的日志记录,这导致我的单元测试失败,因为我传入的 Mock
对象引发了 AttributeError
对于 __qualname__
.
mock_func = Mock()
此问题的一个简单解决方案是手动将预期属性添加到模拟中:
mock_func.__qualname__ = "mock_function"
或者在我创建它时将其添加到模拟的规范中:
mock_func = Moc(["__qualname__"])
但是这些解决方案并不令人满意,因为每当我使用不同的内置属性(例如 __name__
)时我都需要更改它们。
有没有简单的方法来创建一个像函数一样的Mock
?
我找到的最接近的 this bug report that was opened on the wrong repository, and this request 没有回复。
您可以简单地使用任何函数作为模拟的规范。
mock_func = Mock(spec=max)
mock_func.__qualname__
>>> <Mock name='mock.__qualname__' id='140172665218496'>
我有一些使用函数作为参数的代码,我添加了一些包含 __qualname__
的日志记录,这导致我的单元测试失败,因为我传入的 Mock
对象引发了 AttributeError
对于 __qualname__
.
mock_func = Mock()
此问题的一个简单解决方案是手动将预期属性添加到模拟中:
mock_func.__qualname__ = "mock_function"
或者在我创建它时将其添加到模拟的规范中:
mock_func = Moc(["__qualname__"])
但是这些解决方案并不令人满意,因为每当我使用不同的内置属性(例如 __name__
)时我都需要更改它们。
有没有简单的方法来创建一个像函数一样的Mock
?
我找到的最接近的 this bug report that was opened on the wrong repository, and this request 没有回复。
您可以简单地使用任何函数作为模拟的规范。
mock_func = Mock(spec=max)
mock_func.__qualname__
>>> <Mock name='mock.__qualname__' id='140172665218496'>