Это потому, что decorator_example
заменяет функцию test_1
на функцию-оболочку create
, которая имеет совершенно другую сигнатуру, нарушая самоанализ pytest
(например, проверка того, имеет ли create
аргумент test_params
, завершается неудачей, посколькудоступны только *args
и **kwargs
).Вам необходимо использовать functools.wraps
, чтобы имитировать подпись упакованной функции:
import functools
def decorator_example(fn):
@functools.wraps(fn)
def create(*args, **kwargs):
# any code here
return fn(*args, **kwargs)
return create
Совместимость с Python 2.7
Вы можете использовать decorator
пакет.Установите его с помощью обычного
$ pip install decorator
. Пример выше:
import decorator
def decorator_example(fn):
def create(fn, *args, **kwargs):
return fn(*args, **kwargs)
return decorator.decorator(create, fn)
или с использованием six
:
import six
def decorator_example(fn):
@six.wraps(fn)
def create(*args, **kwargs):
# any code here
return fn(*args, **kwargs)
return create