[英]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.