如何解决使用 pytest 在单元测试中避免或绕过多个装饰器
之前有人问过类似的问题:
functools.wraps
在装饰器中创建了一个名为 __wrapped__
的魔法方法,它允许访问被包装的函数。但是,当您有多个装饰器时,这将返回一个内部装饰器,而不是原始函数。
如何避免或绕过多个装饰器?
解决方法
要绕过或避免使用多个装饰器并访问最内部的函数,请使用此递归方法:
def unwrap(func):
if not hasattr(func,'__wrapped__'):
return func
return unwrap(func.__wrapped__)
在 pytest 中,您可以在 conftest.py
中使用此函数并通过以下方式访问:
# conftest.py
import pytest
@pytest.fixture
def unwrap():
def unwrapper(func):
if not hasattr(func,'__wrapped__'):
return func
return unwrapper(func.__wrapped__)
yield unwrapper
# my_unit_test.py
from my_module import decorated_function
def test_my_function(unwrap):
decorated_function_unwrapped = unwrap(decorated_function)
assert decorated_function_unwrapped() == 'something'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。