我正在尝试测试一个装饰的功能。有没有办法在已经应用装饰器时单独模拟装饰器和测试函数?
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
答案 0 :(得分:2)
没有一个简单的解决方案。
这是一个类似的问题:How to strip decorators from a function in python
你可以修改原始代码只是为了测试,或者使用类似这样的库:https://pypi.python.org/pypi/undecorated来编写一个帮助函数来从原始包装器切换到测试包装器:
from undecorated import undecorated
mocked(undecorated(f))()