如何在PythonUnitTest中每次使用不同的参数断言多个方法调用?

如何在PythonUnitTest中每次使用不同的参数断言多个方法调用?,python,python-3.x,mocking,python-unittest,Python,Python 3.x,Mocking,Python Unittest,我正在使用python unittest来测试我的代码。作为我代码的一部分,我正在使用这些 boto3.client('sts') boto3.client('ec2') boto3.client('ssm', arg1, arg2) 所以,在编写测试用例并将其作为论据之前,我模仿了boto3。 现在我可以断言boto3.client是否调用 但我想检查是否使用sts调用boto3.client,以及使用ec2和ssm调用boto3.client,arg1,arg2 当只有一个调用时,我可以使

我正在使用python unittest来测试我的代码。作为我代码的一部分,我正在使用这些

boto3.client('sts')
boto3.client('ec2')
boto3.client('ssm', arg1, arg2)
所以,在编写测试用例并将其作为论据之前,我模仿了boto3。 现在我可以断言boto3.client是否调用

但我想检查是否使用sts调用boto3.client,以及使用ec2和ssm调用boto3.client,arg1,arg2

当只有一个调用时,我可以使用
boto3.client.assert\u调用带有('my parameters')
。但面临的问题是每次检查多个参数不同的呼叫

@patch('createCustomer.src.main.boto3')
    def test_my_code(self, mock_boto3):
        # Executing main class
        mainclass(arg1, arg2)
        # Verifing
        mock_boto3.client.assert_called()
我想达到这样的目标

mock_boto3.client.assert_called_once_with('sts')
mock_boto3.client.assert_called_once_with('ec2')
mock_boto3.client.assert_called_once_with('ssm',arg1,arg2)

但这只是在第一次断言中给出错误,表示boto3.client调用了3次,并且显示了最后一次调用的参数,即“ssm”、arg1、arg2

如果要验证对同一模拟的多个调用,可以使用。就你而言:

mock_boto3.client.assert_has_calls([
    call('sts'),
    call('ec2'),
    call('ssm', arg1, arg2)
])

这是不是
调用
是语法的一部分?若我正在编写call('sts'),那个么它给出了语法错误,并没有定义对call/name call的未解析引用。但是,当我检查has_calls expected parameters时,它包含call('st)@venkat,你是说名称错误吗?像
补丁
调用
单元测试.mock的一部分;您必须从该模块导入它。哦!知道了。我从unittest.mock import调用中调用了
,它成功了。以前我只是导入补丁和MagicMock