2013-04-17 75 views
1

我試圖模擬setUpClass()方法中的函數,然後在tearDownClass()方法中恢復函數。Python中的類方法單元測試用例

class MyClass(unittest.TestCase): 

    @classmethod 
    def setUpClass(cls): 

     cls.save_func = module.func 
     module.func = lambda: True 

    @classmethod 
    def tearDownClass(cls): 

     module.func = cls.save_func 

tearDownClass()方法後,我預計module.func()的調用將調用實際的功能。但事實並非如此。

我通過打印功能做了一些調試。我從tearDownClass()方法得到了以下輸出。

cls.save_func: <unbound method MyClass.save_func> 
module.func: <unbound method MyClass.save_func> 

我嘗試不同的事情,我改變了從類方法中的方法,設置方法:

 def setUp(cls): 

     cls.save_func = module.func 
     module.func = lambda: True 


    def tearDown(cls): 

     module.func = cls.save_func 

令我驚訝的是,一切都似乎是工作。 module.func被恢復,當我打印它時,它給了我函數地址。

module.func <function func at 0x89f9a74> 

你能解釋一下這個行爲嗎?

回答

-1

由於setUp不是「靜態」classmethod,它需要一個類的實例。

參考:unittest basic example

+0

韋斯利,請你詳細說明一下。 –

+0

請參閱http://stackoverflow.com/questions/1682504/how-to-write-a-stub-for-a-classmethod-in-python –