带有参数的python模拟函数

myg*_*myg 2 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

    [...]
Run Code Online (Sandbox Code Playgroud)

在我的测试中,我可以这样做:

    def test_functionToTest(self):
    [...]
    c.config = Mock()
    c.config.get.return_value = 'xxx'
Run Code Online (Sandbox Code Playgroud)

因此,var1,var2和var3都使用“ xxx”相同的值,但是我不知道如何模拟每条指令并给出我想要的var1,var2和var3值

(python版本2.7.3)

che*_*ner 5

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

c.config = Mock()
c.config.get.side_effect = ['xxx', 'yyy', 'zzz']
Run Code Online (Sandbox Code Playgroud)

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