微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 pytest 在单元测试中避免或绕过多个装饰器

如何解决使用 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 举报,一经查实,本站将立刻删除。