Mocking boto3 S3-Client-Methode Python
Ich versuche, eine Singluar-Methode aus dem boto3 s3-Clientobjekt zu verspotten, um eine Ausnahme auszulösen. Aber ich brauche alle anderen Methoden, damit diese Klasse wie gewohnt funktioniert.
Dies ist, damit ich einen einzelnen Ausnahmetest testen kann, wenn ein Fehler beim Ausführen eines @ auftrit upload_part_copy
1. Versuch
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()
Dies gibt jedoch den folgenden Fehler:
ImportError: No module named S3
2. Versuch
achdem ich mir den Quellcode von botocore.client.py angesehen hatte, stellte ich fest, dass es etwas Kluges tut und die Methoupload_part_copy
ist nicht vorhanden. Ich fand, dass es @ zu nennen scheiBaseClient._make_api_call
stattdessen habe ich versucht, das zu verspotten
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()
Dies löst eine Ausnahme aus ... aber auf demget_object
was ich vermeiden möchte.
Irgendwelche Ideen, wie ich die Ausnahme nur auf das @ werfen kaupload_part_copy
Methode