Я пытаюсь смоделировать метод singluar из объекта клиента boto3 s3, чтобы вызвать исключение. Но мне нужны все другие методы, чтобы этот класс работал как обычно.
Это так, чтобы я мог проверить исключительный тест исключения, когда и происходит ошибка при выполнении upload_part_copy
1-я попытка
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
2-я попытка
Посмотрев исходный код 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
?