আমার পছন্দটি এমন ক্লাসগুলিতে থাকে যা সময় ব্যবহার করে প্রকৃতপক্ষে কোনও ইন্টারফেসের উপর নির্ভর করে, যেমন
interface IClock
{
DateTime Now { get; }
}
একটি কংক্রিট বাস্তবায়ন সঙ্গে
class SystemClock: IClock
{
DateTime Now { get { return DateTime.Now; } }
}
তারপরে আপনি যদি চান তবে আপনি পরীক্ষার জন্য অন্য যে কোনও ধরণের ঘড়ি সরবরাহ করতে পারেন, যেমন
class StaticClock: IClock
{
DateTime Now { get { return new DateTime(2008, 09, 3, 9, 6, 13); } }
}
ক্লাসকে নির্ভর করে যা তার উপর নির্ভর করে ক্লক সরবরাহ করতে কিছু ওভারহেড থাকতে পারে তবে এটি যে কোনও সংখ্যক নির্ভরতা ইনজেকশন সমাধানগুলি দ্বারা নিয়ন্ত্রণ করা যেতে পারে (নিয়ন্ত্রণের ধারক, প্লেইন পুরানো কনস্ট্রাক্টর / সেটার ইনজেকশন, বা এমনকি স্ট্যাটিক গেটওয়ে প্যাটার্ন ব্যবহার করে) )।
পছন্দসই সময় সরবরাহ করে এমন কোনও বস্তু বা পদ্ধতি সরবরাহের অন্যান্য প্রক্রিয়াগুলিও কাজ করে তবে আমি মনে করি মূল বিষয়টি হ'ল সিস্টেমের ঘড়িটিকে পুনরায় সেট করা এড়ানো, কারণ এটি কেবল অন্যান্য স্তরের ব্যথা প্রবর্তন করতে চলেছে।
এছাড়াও, DateTime.Now
আপনার গণনায় এটি ব্যবহার এবং অন্তর্ভুক্ত করা ঠিক ঠিক মনে হয় না - এটি আপনাকে নির্দিষ্ট সময় পরীক্ষা করার ক্ষমতা হারাতে পারে, উদাহরণস্বরূপ যদি আপনি কোনও বাগ আবিষ্কার করেন যা কেবলমাত্র মধ্যরাতের সীমানার কাছাকাছি বা মঙ্গলবার ঘটে। বর্তমান সময় ব্যবহার করা আপনাকে সেই পরিস্থিতিগুলি পরীক্ষা করতে দেয় না। বা কমপক্ষে আপনি যখন চান না।