मैं boto3 s3 क्लाइंट ऑब्जेक्ट से फेंकने और अपवाद के लिए सिंगलर विधि का नकल करने की कोशिश कर रहा हूं। लेकिन इस वर्ग के लिए सामान्य के रूप में काम करने के लिए मुझे अन्य सभी तरीकों की आवश्यकता है।मॉकिंग boto3 S3 क्लाइंट विधि पायथन
ImportError: No module named 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()
हालांकि इस निम्न त्रुटि देता प्रदर्शन होता है दूसरा प्रयास
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
विधि पर अपवाद कैसे फेंक सकता हूं?
यह बहुत उपयोगी है। मुझे यह महसूस करने में थोड़ी देर लग गई कि बहुत से बोटो 3 क्लाइंट प्रभावी ढंग से [रनटाइम पर जेनरेट किए गए हैं] (https://boto3.readthedocs.io/en/latest/guide/new.html#major-features), और ऐसे में , सीधे मजाक नहीं किया जा सकता है। – rumdrums