2013-02-07 36 views
0

我想在Python的unitest中設置一個條件修飾符到setUpClass。我曾嘗試以下(沒有條件,現在,以展示點):如何在unittest中的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方法「結合」兩個裝飾器?

回答

0

當您看到回溯線時,它會告訴您發生錯誤的位置。我最好的猜測是,因爲我不知道代碼的其餘部分,在代碼的主體中,您留下了一個額外的參數或添加了額外的逗號。

至於兩個修飾是質疑在這裏問:Can I combine two decorators into a single one in Python?

*也從setUpClass刪除類,因爲安裝程序是它自己的功能

0

只是第一個實例化您的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 
相關問題