2016-02-12 124 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