У меня есть несколько относительно сложных интеграционных тестов в моем коде 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
functools.wraps
. - person Kos   schedule 02.01.2013