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 normal funktioniert.
Auf diese Weise kann ich einen einzelnen Ausnahmetest testen, wenn beim Ausführen einer upload_part_copy ein Fehler auftritt
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 führt jedoch zu folgendem Fehler:
ImportError: No module named S3
2. Versuch
Nachdem ich mir den Quellcode botocore.client.py angesehen hatte, stellte ich fest, dass er etwas Kluges tut und die Methode upload_part_copy
nicht existiert. Ich fand, dass es BaseClient._make_api_call
stattdessen zu rufen scheint, also versuchte ich 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 get_object
die ich vermeiden möchte.
Irgendwelche Ideen, wie ich nur die Ausnahme auf die upload_part_copy
Methode werfen kann ?