【发布时间】:2016-09-05 17:32:33
【问题描述】:
我正在尝试从 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 方法上抛出异常有什么想法吗?
【问题讨论】:
标签: python mocking boto boto3 botocore