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