2016-02-12 126 views
0

我想模擬一個調用具有參數的外部函數的函數。 我知道如何模擬一個函數,但我不能給參數。我用@patch,side_effects嘗試過,但沒有成功。帶參數的python模擬函數

def functionToTest(self, ip): 
    var1 = self.config.get(self.section, 'externalValue1') 
    var2 = self.config.get(self.section, 'externalValue2') 
    var3 = self.config.get(self.section, 'externalValue3') 

    if var1 == "xxx": 
     return False 
    if var2 == "yyy": 
     return False 

    [...] 

在我的測試,我可以做到這一點:

def test_functionToTest(self): 
    [...] 
    c.config = Mock() 
    c.config.get.return_value = 'xxx' 

因此,無論VAR1,VAR2和VAR3採取「XXX」相同的值,但我不知道如何嘲笑的每一個指令,給VAR1,VAR2和VAR3值我想

(Python版本2.7.3)

回答

3

使用side_effect排隊一系列的返回值。

c.config = Mock() 
c.config.get.side_effect = ['xxx', 'yyy', 'zzz'] 

首次c.config.get被調用時,它會返回'xxx';第二次,'yyy';第三次,'zzz'。 (如果它被稱爲第四次,它會引起一個StopIteration錯誤。)

+0

嘿chepner,它的工作原理!我試圖改變參數(self.section,'externalValue'),但你的解決方案更好。謝謝! – myg