[英]How can I set conditional decorators on setUpClass in unittest?
我想在python的unitest中为setUpClass
设置一个条件装饰器。 我尝试了以下方法(暂时没有条件,以证明这一点):
import unittest
class conditional_decorator(object):
def __call__(self, func):
print ("Extra output")
return func
class First(unittest.TestCase):
@classmethod
@conditional_decorator
def setUpClass(cls):
print ("setting up")
def test1(self):
pass
if __name__ == '__main__':
unittest.main()
但我得到一个错误
TypeError: object.__new__() takes no parameters
我怎么解决这个问题? 此外,有没有一种简单的方法可以为setUpClass
方法“组合”两个装饰器?
当您查看回溯行时,它将告诉您错误发生在哪里。 最好的猜测是,由于我不知道其余代码,因此在代码正文中您留下了一个额外的参数或添加了一个逗号。
至于在这里被问到的两个装饰器: 我可以在Python中将两个装饰器组合成一个吗?
*还从setUpClass中删除Class,因为setUp是它自己的函数
只需首先实例化您的conditional_decorator
类:
class First(unittest.TestCase):
@classmethod
@conditional_decorator() # Note the class is instantiated first.
def setUpClass(cls):
print ("setting up")
def test1(self):
pass
或使用函数代替类作为装饰器:
def conditional_decorator(func):
print ("Extra output")
return func
class First(unittest.TestCase):
@classmethod
@conditional_decorator
def setUpClass(cls):
print ("setting up")
def test1(self):
pass
if __name__ == '__main__':
unittest.main()
现在可以正常工作:
$ python my_test.py
Extra output
setting up
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.