簡體   English   中英

如何在unittest中的setUpClass上設置條件修飾符?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM