2013-04-17 48 views
0

我試圖修補一個類,有一個測試函數創建修補類的實例,讓那個實例調用一個類函數,然後我想測試那個類函數被調用。我怎樣才能做到這一點?補丁 - 如何檢查修補類的實例稱爲類函數?

下面是我的代碼的基本變化:

測試文件:

class TestChannel(unittest.TestCase): 
    @patch("notification.models.Channel") 
    def testAddChannelWithNamePutsChannel(self, *args): 
     addChannelWithName("channel1") 
     self.assertTrue(Channel.put.called) 

的代碼進行測試:

def addChannelWithName(name): 
    channel = Channel(name = name) 
    channel.put() 

基本上,我想測試通道。 put()被調用。當然,這段代碼不起作用,因爲我正在檢查類函數put()是否被調用而不是實例,但一般來說。我需要在實例上調用它以通過它。我已經嘗試了幾個嘲笑Channel類的不同部分的變體,它是返回值,但我似乎無法使其工作。我該怎麼做?非常感謝!

回答

1

如何讓addChannelWithName函數返回通道實例?

def addChannelWithName(name): 
    channel = Channel(name = name) 
    channel.put() 
    return channel 

class TestChannel(unittest.TestCase): 
    @patch("notification.models.Channel") 
    def testAddChannelWithNamePutsChannel(self, *args): 
     channel = addChannelWithName("channel1") 
     self.assertTrue(channel.put.called) 
+0

在這種情況下,我會給你一個+1。不過,我也有一個非常類似的功能,刪除一個頻道,在這種情況下,嘗試返回已刪除的對象沒有多大意義。任何想法都可以在所有情況下工作? – golmschenk

+0

我不得不更多地瞭解你的Channel類,並且「刪除一個頻道」意味着(暗示,做什麼)等等來回答這個問題。有一點是,單元測試需要可測試的代碼......並且當您首先編寫代碼時,編寫可測試代碼更容易;) –