Mocking boto3 S3 client method Python 模拟boto3 S3客户端方法Python
Mocking boto3 S3 client method Python 模拟boto3 S3客户端方法Python
我试图模拟boto3 s3客户端对象的一个单一方法,以抛出一个异常。但是我需要这个类的所有其他方法都正常工作。
这样我就可以在执行upload_part_copy时测试一个单独的异常测试。
第一次尝试
import boto3 from mock import patch with patch('botocore.client.S3.upload_part_copy', side_effect=Exception('上传错误')) as mock: client = boto3.client('s3') # 应返回实际结果 o = client.get_object(Bucket='my-bucket', Key='my-key') # 应返回模拟的异常 e = client.upload_part_copy()
然而,这会出现以下错误:
ImportError: No module named S3
第二次尝试
在查看botocore.client.py源代码后,我发现它做了一些巧妙的事情,方法upload_part_copy
并不存在。我发现它似乎调用的是BaseClient._make_api_call
,所以我尝试模拟这个方法
import boto3 from mock import patch with patch('botocore.client.BaseClient._make_api_call', side_effect=Exception('上传错误')) as mock: client = boto3.client('s3') # 应返回实际结果 o = client.get_object(Bucket='my-bucket', Key='my-key') # 应返回模拟的异常 e = client.upload_part_copy()
这会抛出一个异常... 但是在我想避免的get_object
方法上。
有没有关于如何只在upload_part_copy
方法上抛出异常的想法?