带参数的python mock函数

时间:2016-02-12 13:59:59

标签: python mocking

我想模拟一个用参数调用外部函数的函数。 我知道如何模拟一个函数,但我不能给出参数。我尝试使用@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)

1 个答案:

答案 0 :(得分:3)

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

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

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