Ich versuche, eine singluar-Methode aus dem boto3 s3 Client-Objekt zu werfen und Ausnahme zu verspotten. Aber ich brauche alle anderen Methoden für diese Klasse, um normal zu arbeiten.Mocking Boto3 S3-Client-Methode Python
Dies ist, so kann ich eine singuläre Ausnahme Test testen, wenn und Fehler tritt ein upload_part_copy
ersten 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()
aber dies gibt den folgenden Fehler ausführen:
ImportError: No module named S3
2. Versuch
Nachdem am botocore.client.py Quellcode der Suche fand ich, dass es etwas Gescheites und die Methode tut upload_part_copy
existiert nicht. Ich fand, dass es scheint, BaseClient._make_api_call
statt zu nennen und so versuchte ich zu verspotten, dass
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, sondern löst eine Ausnahme ... aber auf dem get_object
das möchte ich vermeiden.
Irgendwelche Ideen, wie ich nur die Ausnahme auf der upload_part_copy
Methode werfen?
Dies ist sehr hilfreich. Es hat eine Weile gedauert, bis ich festgestellt habe, dass viele der boto3-Clients effektiv [zur Laufzeit generiert] (https://boto3.readthedocs.io/en/latest/guide/new.html#major-features) und als solche erstellt wurden , kann nicht direkt verspottet werden. – rumdrums