python 带参数的模拟函数

python mock functions with parameters

我想模拟一个调用带有参数的外部函数的函数。 我知道如何模拟一个函数,但我不能提供参数。我尝试使用@patch,side_effects,但没有成功。

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)

使用side_effect排队一系列return值。

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

第一次调用c.config.get,会return'xxx';第二次,'yyy';第三次,'zzz'。 (如果第四次调用它,将引发 StopIteration 错误。)