【问题标题】:How to create a Mock which has functions' special (dunder) attributes如何创建具有函数特殊(dunder)属性的 Mock
【发布时间】:2019-09-18 09:50:08
【问题描述】:

我有一些使用函数作为参数的代码,并且我添加了一些包含__qualname__ 的日志记录,这导致我的单元测试失败,因为我传入的Mock 对象为__qualname__ 引发了AttributeError .

mock_func = Mock()

解决这个问题的一个简单方法是手动将期望的属性添加到mock中:

mock_func.__qualname__ = "mock_function"

或者在我创建它时将它添加到模拟的规范中:

mock_func = Moc(["__qualname__"])

但是这些解决方案并不令人满意,因为每当我使用不同的内置属性(例如__name__)时,我都需要更改它们。

有没有一种简单的方法来创建一个行为类似于函数的Mock

我找到的最接近的是在错误的存储库中打开的this bug report,以及没有回复的this request

【问题讨论】:

    标签: python unit-testing mocking python-unittest


    【解决方案1】:

    您可以简单地使用任何函数作为模拟的规范。

    mock_func = Mock(spec=max)
    mock_func.__qualname__
    >>> <Mock name='mock.__qualname__' id='140172665218496'>
    

    【讨论】:

    • 好主意,但是我希望这对于代码的未来读者来说会相当混乱。
    • 您可以发表评论或执行Mock(spec=lambda justforspec:0) 之类的操作以使其更清晰,甚至可以使用def function(): pass 并将其用于规范
    猜你喜欢
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多