如何设置副作用以测试多次调用同一函数的函数?
以下节目和示例,其中call_it首先调用subprocess.check_call首先调用以检查cmd是否存在,如果存在则调用它来执行命令。
def call_it(cmd, args):
try:
subprocess.check_call(
['which', cmd],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
except subprocess.CalledProcessError:
print '%s not found'
try:
subprocess.check_call([cmd, args])
except Exception as e:
print 'Something went wrong'
如何在测试中设置side_effect,以便在第二次调用subprocess.check_call时触发异常
第一个很容易:
@mock.patch('MODULE_NAME.subprocess.check_call')
def testMultiNotPresent(self, mock_call):
mock_call.side_effect = subprocess.CalledProcessError('foo', 'bar')
self.assertIsNone(multiCall.call_it('echo', '-n'))
mock_call.assert_called_once_with(['which', cmd],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
但第二个怎么样?
我尝试过创建多个模拟,如下所示:
@mock.patch('MODULE_NAME.subprocess.check_call')
@mock.patch('MODULE_NAME.subprocess.check_call')
def testMultiSomeError(self, mock_call1, mock_call_2):
但事实证明只有一个模拟处于活动状态,即第二个模拟的call_count为2,第一个为0。
所以基本上我试图将side_effect与调用
相关联subprocess.check_call([cmd,args])