मेरी प्राथमिकता उन वर्गों की है जो समय का उपयोग करते हैं, वास्तव में एक इंटरफ़ेस पर निर्भर होते हैं, जैसे कि
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
और इसे अपनी गणना में शामिल करना सिर्फ सही नहीं लगता है - यह आपको विशेष समय का परीक्षण करने की क्षमता से लूटता है, उदाहरण के लिए यदि आप एक बग की खोज करते हैं जो केवल आधी रात की सीमा के पास होता है, या मंगलवार को होता है। वर्तमान समय का उपयोग करने से आप उन परिदृश्यों का परीक्षण नहीं कर पाएंगे। या कम से कम जब भी आप चाहें।