如何在Python单元测试中每次使用不同的参数断言多个方法调用?

问题描述 投票:0回答:1

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

boto3.client('sts')
boto3.client('ec2')
boto3.client('ssm', arg1, arg2)

所以我在编写测试用例之前嘲笑了 boto3 ,并将其作为参数。 现在我可以断言 boto3.client 是否被调用。

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

当只有一个电话时,我可以使用

boto3.client.assert_called_with('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

python python-3.x mocking python-unittest
1个回答
8
投票

如果要验证对同一个模拟的多个调用,可以将

assert_has_calls
call
一起使用。对于你的情况:

from unittest.mock import call

mock_boto3.client.assert_has_calls([
    call('sts'),
    call('ec2'),
    call('ssm', arg1, arg2)
])
© www.soinside.com 2019 - 2024. All rights reserved.