最佳答案
我试图从 boto3s3客户机对象模拟一个单一方法来抛出异常。但是我需要所有其他方法使这个类能够正常工作。
这样,当执行 上传 _ 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
方法上的异常有什么想法吗?