У меня есть несколько относительно сложных тестов интеграции в моем коде 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 выполнить эти методы тестирования и обработать декоратор, как он предназначен?
Решение
Благодаря маджар, я получил эту работу, реструктурируя свой код, чтобы выглядеть так, используя functools.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