【问题标题】:Mock python decorator in unit tests在单元测试中模拟 python 装饰器
【发布时间】:2016-08-20 20:04:05
【问题描述】:

我正在尝试测试一个经过修饰的函数。当装饰器已经应用时,有没有办法单独模拟装饰器和测试功能?

import mock


def decorator(func):
    def wrapper(*args, **kwargs):
        return 1
    return wrapper


def mocked(func):
    def wrapper(*args, **kwargs):
        return 2
    return wrapper


@decorator
def f():
    return 0


with mock.patch('test.decorator') as d:
    d.side_effect = mocked
    assert f() == 2  # error

【问题讨论】:

  • 我很难理解你在这里要做什么......你是否试图更改为这个测试装饰 f 的函数?
  • 是的,我正在尝试用 mocked 替换装饰器。

标签: python unit-testing testing mocking decorator


【解决方案1】:

没有简单的解决方案。

这是一个类似的问题:How to strip decorators from a function in python

您可以修改原始代码仅用于测试,或使用类似以下库的内容:https://pypi.python.org/pypi/undecorated 以编写帮助函数以从原始包装器切换到测试包装器:

from undecorated import undecorated
mocked(undecorated(f))()

【讨论】:

    猜你喜欢
    • 2021-12-23
    • 2012-11-01
    • 2012-04-26
    • 2011-03-02
    • 1970-01-01
    • 2022-06-14
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多