我正在尝试从boto3 s3客户端对象模拟一个单独的方法来引发异常。但是我需要所有其他方法来使此类正常工作。
这样一来,我可以在执行upload_part_copy并发生错误时测试单个异常测试
第一次尝试
import boto3
from mock import patch
with patch('botocore.client.S3.upload_part_copy', side_effect=Exception('Error Uploading')) as mock:
client = boto3.client('s3')
# Should return actual result
o = client.get_object(Bucket='my-bucket', Key='my-key')
# Should return mocked exception
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('Error Uploading')) as mock:
client = boto3.client('s3')
# Should return actual result
o = client.get_object(Bucket='my-bucket', Key='my-key')
# Should return mocked exception
e = client.upload_part_copy()
这引发了异常...但是 get_object
我想避免这种情况。
关于如何只能在upload_part_copy
方法上引发异常的任何想法?