শুরু করার জন্য, MagicMock
এর একটি সাবক্লাস Mock
।
class MagicMock(MagicMixin, Mock)
ফলস্বরূপ, ম্যাজিকমক মক সরবরাহ করে এবং আরও অনেক কিছু সরবরাহ করে। মককে ম্যাজিকমকের স্ট্রিপড ডাউন সংস্করণ হিসাবে ভাবার পরিবর্তে ম্যাজিকমকে মকের একটি বর্ধিত সংস্করণ হিসাবে ভাবেন। এটি মক কেন বিদ্যমান এবং ম্যাক ম্যাজিকমকের শীর্ষে কী সরবরাহ করে সে সম্পর্কে আপনার প্রশ্নের সমাধান করা উচিত।
দ্বিতীয়ত, MagicMock অনেক / সর্বাধিক যাদু পদ্ধতিগুলির ডিফল্ট প্রয়োগকরণ সরবরাহ করে, তবে মক তা করেন না। প্রদত্ত যাদু পদ্ধতি সম্পর্কে আরও তথ্যের জন্য এখানে দেখুন ।
প্রদত্ত যাদু পদ্ধতির কয়েকটি উদাহরণ:
>>> int(Mock())
TypeError: int() argument must be a string or a number, not 'Mock'
>>> int(MagicMock())
1
>>> len(Mock())
TypeError: object of type 'Mock' has no len()
>>> len(MagicMock())
0
এবং এগুলি যেহেতু স্বজ্ঞাত হতে পারে না (অন্তত আমার কাছে স্বজ্ঞাত নয়):
>>> with MagicMock():
... print 'hello world'
...
hello world
>>> MagicMock()[1]
<MagicMock name='mock.__getitem__()' id='4385349968'>
এই পদ্ধতিগুলি প্রথমবারের মতো আহ্বান করা হওয়ায় আপনি ম্যাজিকমকে যুক্ত পদ্ধতিগুলি "দেখতে" পারেন:
>>> magic1 = MagicMock()
>>> dir(magic1)
['assert_any_call', 'assert_called_once_with', ...]
>>> int(magic1)
1
>>> dir(magic1)
['__int__', 'assert_any_call', 'assert_called_once_with', ...]
>>> len(magic1)
0
>>> dir(magic1)
['__int__', '__len__', 'assert_any_call', 'assert_called_once_with', ...]
তো, কেন সব সময় ম্যাজিকমক ব্যবহার করবেন না?
আপনার কাছে ফিরে প্রশ্নটি: আপনি কি ডিফল্ট যাদু পদ্ধতি প্রয়োগের সাথে ঠিক আছেন? উদাহরণস্বরূপ, mocked_object[1]
ত্রুটি না করা কি ঠিক আছে ? ইতিমধ্যে যাদু পদ্ধতি বাস্তবায়নের কারণে কোনও অনিচ্ছাকৃত পরিণতিতে আপনি কি ঠিক আছেন?
যদি এই প্রশ্নের উত্তর হ্যাঁ হয়, তবে এগিয়ে যান এবং ম্যাজিকমক ব্যবহার করুন। তা না হলে মোককে আঁকড়ে থাকুন।