У меня есть несколько довольно сложных интеграционных тестов в моем коде Python. Я значительно упростил их с помощью специального декоратора, и я действительно доволен результатом. Вот простой пример того, как выглядит мой декоратор:
def specialTest(fn):
def wrapTest(self):
#do some some important stuff
pass
return wrapTest
Вот как может выглядеть тест:
class Test_special_stuff(unittest.TestCase):
@specialTest
def test_something_special(self):
pass
Это прекрасно работает и без проблем выполняется тестером PyCharm. Однако когда я запускаю тест из командной строки, используя Nose, он пропускает любой тест с помощью декоратора @specialTest.
Я попытался назвать декоратор как testSpecial, чтобы он соответствовал правилам по умолчанию, но тогда мой параметр FN не передается.
Как мне заставить Nose выполнить эти тестовые методы и обработать декоратор так, как он предназначен?
РЕШЕНИЕ
Благодаря madjar, я получил эту работу, реструктурировав мой код, чтобы он выглядел следующим образом, используя functools.wraps и изменив имя оболочки:
from functools import wraps
def specialTest(fn):
@wraps(fn)
def test_wrapper(self,*args,**kwargs):
#do some some important stuff
pass
return test_wrapper
class Test_special_stuff(unittest.TestCase):
@specialTest
def test_something_special(self):
pass