在单元测试中模拟python装饰器

时间:2016-04-26 19:42:51

标签: python unit-testing testing mocking decorator

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

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

1 个答案:

答案 0 :(得分:2)

没有一个简单的解决方案。

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

你可以修改原始代码只是为了测试,或者使用类似这样的库:https://pypi.python.org/pypi/undecorated来编写一个帮助函数来从原始包装器切换到测试包装器:

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