如何创建具有函数特殊(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'>