কয়েকটি সমস্যা আছে।
প্রথমত, আপনি যেভাবে ব্যবহার mock.patch
করছেন তা একেবারেই সঠিক নয়। যখন একটি প্রসাধক হিসাবে ব্যবহার, এটি দেওয়া তৈরি function / class (এই ক্ষেত্রে, প্রতিস্থাপন datetime.date.today
) একটি সঙ্গে Mock
বস্তুর শুধুমাত্র সজ্জিত ফাংশন মধ্যে । সুতরাং, কেবল আপনার today()
ইচ্ছার datetime.date.today
মধ্যেই একটি আলাদা ফাংশন হবে যা আপনি যা চান তা প্রদর্শিত হয় না।
আপনি যা দেখতে চান তা আরও এইরকম বলে মনে হচ্ছে:
@mock.patch('datetime.date.today')
def test():
datetime.date.today.return_value = date(2010, 1, 1)
print datetime.date.today()
দুর্ভাগ্যক্রমে, এটি কাজ করবে না:
>>> test()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "build/bdist.macosx-10.6-universal/egg/mock.py", line 557, in patched
File "build/bdist.macosx-10.6-universal/egg/mock.py", line 620, in __enter__
TypeError: can't set attributes of built-in/extension type 'datetime.date'
এটি ব্যর্থ হয়েছে কারণ পাইথন অন্তর্নির্মিত প্রকারগুলি অপরিবর্তনীয় - আরও তথ্যের জন্য এই উত্তরটি দেখুন।
এই ক্ষেত্রে, আমি ডেটটাইম সাব-ক্লাস করব myself
import datetime
class NewDate(datetime.date):
@classmethod
def today(cls):
return cls(2010, 1, 1)
datetime.date = NewDate
এবং এখন আপনি করতে পারেন:
>>> datetime.date.today()
NewDate(2010, 1, 1)
mock
গ্রন্থাগারের ডক্স : voidspace.org.uk/python/mock/exferences.html#