2010-06-04 16 views
5

मैं इकाई के साथ एक वर्ग का परीक्षण कर रहा हूं जिसका मूल्य अक्सर बदलता है, संचार के आधार पर यह किसी अन्य घटक से प्राप्त होता है। अगर कक्षा को 5 सेकंड के लिए कोई संचार नहीं मिलता है, तो संपत्ति डिफ़ॉल्ट मान पर वापस आती है।टाइमआउट के साथ यूनिट परीक्षण

मेरे लिए परीक्षण करने के लिए मूल्यों को ट्रिगर करने के लिए संचार घटक को स्टब करना और नकल करना मेरे लिए आसान है। समस्या यह है कि यदि मैं अपने यूनिट परीक्षणों को एक मशीन पर चलाता हूं जो व्यस्त है (जैसे बिल्ड मशीन), और संपत्ति को डिफ़ॉल्ट करने के लिए पर्याप्त देरी है, तो मेरा यूनिट परीक्षण विफल हो जाएगा।

आप यह सुनिश्चित करने के लिए कैसे परीक्षण करेंगे कि विभिन्न संपत्ति स्थितियों को अनुकरण करते समय इस संपत्ति का उचित मूल्य है?

एक विचार मेरे कोड को पुन: स्थापित करना है ताकि मैं कक्षा के उस हिस्से को रोक सकूं जो टाइमआउट को नियंत्रित करता है। दूसरा एक यूनिट टेस्ट लिखना है जैसे कि यह पता लगा सकता है कि यह टाइमआउट के कारण विफल रहा है और इंगित करता है कि परीक्षण परिणामों में।

उत्तर

3

आप टाइमआउट संपत्ति कॉन्फ़िगर करने योग्य बना सकते हैं, फिर इसे अपने यूनिट परीक्षणों में उच्च पर्याप्त मूल्य पर सेट करें (या पर्याप्त कम, यदि आप रीसेट व्यवहार का परीक्षण करना चाहते हैं)।

+0

मैं ऐसा करना चाहते हैं, क्योंकि यह मेरी स्थिति के लिए सरल समाधान था चुना है। अन्य सुझाव भी महान थे। सबको शुक्रीया! –

3

डेटटाइम का उपयोग करते समय एक ही कॉमन समस्या है। अब। अपने परीक्षण में

public static class SystemTime 
{ 
    public static Func<DateTime> Now =() => DateTime.Now; 
} 

और उसके बाद: Ayende described एक चाल इससे निपटने के लिए है कि मैं इसे पसंद किया

[Test] 
public void Should_calculate_length_of_stay_from_today_when_still_occupied() 
{ 
    var startDate = new DateTime(2008, 10, 1); 
    SystemTime.Now =() => new DateTime(2008, 10, 5); 

    var occupation = new Occupation {StartDate = startDate}; 

    occupation.LengthOfStay().ShouldEqual(4); 
} 

हो सकता है कि आप लाभ उठा सकते हैं अपने समय समाप्ति के लिए एक ही परिजन चाल?

+0

+1 दिलचस्प। –

7

मैं एक अलग दृष्टिकोण की कोशिश करता हूं। खेल डेवलपर्स को अक्सर खेल के समय को नियंत्रित करने के लिए एक तरीका चाहिए, उदा। तेजी से आगे की कार्यक्षमता के लिए या फ्रेम दर सिंक्रनाइज़ करने के लिए। वे Timer ऑब्जेक्ट पेश करते हैं, जो हार्डवेयर घड़ी या नकली घड़ी से टिक को पढ़ता है।

अपने मामले में, आप अपने यूनिट परीक्षणों और एक टाइमर के लिए एक नियंत्रित टाइमर प्रदान कर सकते हैं जो उत्पादन मोड में सिस्टम समय के लिए प्रतिनिधि है। इस तरह, आप उस समय को नियंत्रित कर सकते हैं जो आपके परीक्षण मामले के लिए गुज़रता है और इस प्रकार कक्षा-अंडर-टेस्ट को कुछ समय-समय पर शर्तों के तहत प्रतिक्रिया देना पड़ता है।

छद्म कोड:

संबंधित मुद्दे