Python为同一个模拟

时间:2016-10-17 13:10:30

标签: python unit-testing python-mock

如何设置副作用以测试多次调用同一函数的函数?

以下节目和示例,其中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])

0 个答案:

没有答案