Cor*_*gan 25 python ignore decorator nose
我的Python代码中有一些相对复杂的集成测试.我用自定义装饰器大大简化了它们,我对结果非常满意.这是我的装饰器看起来像一个简单的例子:
def specialTest(fn):
def wrapTest(self):
#do some some important stuff
pass
return wrapTest
Run Code Online (Sandbox Code Playgroud)
这是测试的样子:
class Test_special_stuff(unittest.TestCase):
@specialTest
def test_something_special(self):
pass
Run Code Online (Sandbox Code Playgroud)
这很好用,并且由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
Run Code Online (Sandbox Code Playgroud)
mad*_*jar 24
如果我没记错的话,鼻子根据他们的名字(名称以test_开头的函数)加载测试.在您发布的代码片段中,您不会__name__在包装函数中复制函数的属性,因此返回的函数的名称wrapTest和nose决定它不是测试.
将使用将函数的属性复制到新函数的简单方法functools.wraps.