मैं .NET 2.0 फ्रेमवर्क, और, अगर लक्ष्यीकरण VS2008 का उपयोग करें, नहीं मैं इसे बदल नहीं सकते :)इकाई परीक्षण उद्देश्यों के लिए "आज की तारीख" कैसे भिन्न हो सकती है?
मैं एक DateCalculator
वर्ग की है। इसकी विधि GetNextExpirationDate
आधारभूत तिथि के रूप में आंतरिक रूप से DateTime.Today
का उपयोग करके, अगले समाप्ति को निर्धारित करने का प्रयास करती है।
मैं इकाई परीक्षण लिख रहा था के रूप में, मुझे एहसास हुआ कि मैं अलग 'आज दिनांकों GetNextExpirationDate
का परीक्षण करना चाहता था।
ऐसा करने का सबसे अच्छा तरीका क्या है? यहां कुछ विकल्प दिए गए हैं जिन पर मैंने विचार किया है:
- तर्क
baselineDate
के साथ एक संपत्ति/अधिभारित विधि का पर्दाफाश करें और केवल इकाई परीक्षण से इसका उपयोग करें। वास्तविक क्लाइंट कोड में,baselineDate
सेDateTime.Today
को उस विधि के पक्ष में संपत्ति/ओवरलोडेड विधि की उपेक्षा करें। मैं ऐसा करने में अनिच्छुक हूं क्योंकि यह डेटकुल्यूलेटर वर्ग के सार्वजनिक इंटरफ़ेस को अजीब बनाता है। baselineDate
नामक संरक्षित फ़ील्ड बनाएं जो आंतरिक रूप सेDateTime.Today
पर सेट है। परीक्षण करते समय,DateCalculatorForTesting
DateCalculator
से प्राप्त करें और निर्माता के माध्यम सेbaslineDate
सेट करें। यह सार्वजनिक इंटरफ़ेस को साफ रखता है, लेकिन अभी भी बहुत अच्छा नहीं है -baselineDate
संरक्षित किया गया था और परीक्षण के लिए पूरी तरह से व्युत्पन्न कक्षा की आवश्यकता है।- विस्तार विधियों का उपयोग करें। मैंने
ExtensionAttribute
जोड़ने के बाद इसे आजमाया, फिर एहसास हुआ कि यह काम नहीं करेगा क्योंकि एक्सटेंशन विधियां निजी/संरक्षित चर तक नहीं पहुंच सकती हैं। मैंने शुरू में सोचा कि यह वास्तव में काफी सुंदर समाधान था। :(
मैं सुनवाई क्या अन्य लोगों के बारे में सोच में रुचि होगी।
अच्छा सवाल है ... यह है क्योंकि आप पर जो कुछ भी 'आज भरोसा अपने परीक्षण में नाकाम रहने को मिल रहा है एक विशिष्ट तिथि तक प्रतीक्षा करनी पड़ती हास्यास्पद हो जाएगी और यह भी वृद्धि नहीं कर सकते हैं :) – slugster
डुप्लिकेट: http: //stackoverflow.com/questions/2425721/unit-testing-datetime-now –
सभी इनपुट के लिए धन्यवाद। दिनांक समय प्रदाता दृष्टिकोण कुछ ऐसा था जो मुझे भी सोचना चाहिए था। इस मामले में, मुझे लगता है कि मैं गिशू के दृष्टिकोण के साथ जाऊंगा - ऐसा लगता है कि यह कम से कम काम और कम से कम आक्रामक है। –