2008-08-15 33 views
18

मैं वर्तमान में सी # में एक साधारण, टाइमर आधारित मिनी ऐप लिख रहा हूं जो हर के सेकेंड में एक्शन एन बार करता है।
मैं एक परीक्षण संचालित विकास शैली को अपनाने की कोशिश कर रहा हूं, इसलिए मेरा लक्ष्य ऐप के सभी हिस्सों का परीक्षण करना है।इकाई एक टाइमर आधारित आवेदन परीक्षण?

तो, मेरा सवाल है: क्या टाइमर आधारित कक्षा का परीक्षण करने का कोई अच्छा तरीका है?

समस्या, जैसा कि मैंने इसे देखा है, यह है कि परीक्षणों को असुविधाजनक रूप से निष्पादित करने में काफी समय लगेगा, क्योंकि उन्हें वांछित कार्यों के लिए इतनी देर तक इंतजार करना होगा।
विशेष रूप से यदि कोई ढांचा (1 एमएस?) द्वारा अनुमत न्यूनतम समय संकल्प का उपयोग करने के बजाय यथार्थवादी डेटा (सेकेंड) चाहता है।
मैं कार्रवाई के लिए एक नकली वस्तु का उपयोग कर रहा हूं, कार्रवाई के समय की संख्या पंजीकृत करने के लिए, और इसलिए कि कार्रवाई व्यावहारिक रूप से कोई समय नहीं लेती है।

उत्तर

9

मैंने जो किया है वह टाइमर, और वर्तमान सिस्टम समय का नकल करना है, कि मेरी घटनाओं को तुरंत ट्रिगर किया जा सकता है, लेकिन जहां तक ​​परीक्षण के तहत कोड का समय था, समय बीत गया था।

3

मुझे लगता है कि मैं इस मामले में क्या करूँगा वह कोड है जो वास्तव में निष्पादित करता है जब टाइमर टिकता है, पूरे अनुक्रम की बजाय। आपको वास्तव में यह तय करने की ज़रूरत है कि क्या आपके लिए आवेदन के वास्तविक व्यवहार का परीक्षण करना उचित है (उदाहरण के लिए, यदि प्रत्येक टिक में एक टिक से दूसरे में भारी परिवर्तन होने के बाद क्या होता है), या यह पर्याप्त है (यानी , कार्रवाई हर समय एक ही है) बस अपने तर्क का परीक्षण करने के लिए।

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

+1

आपके दृष्टिकोण के साथ एकमात्र समस्या यह है कि आपको संभवतः कुछ ऐसा होता है जो चुनाव होने पर होता है, क्या यह एक अच्छा विचार है? यानी ऐसा कुछ उजागर करना जो आपको केवल परीक्षणों के लिए नहीं है। एक विकल्प आंतरिक हो सकता है (और InternalsVisibleTo) लेकिन बहुत से लोग इसे पसंद नहीं करते हैं – roundcrisis

1

मैं डैनी के साथ सहमत हूं क्योंकि यह संभवतः टाइमर तंत्र के बारे में भूलने के लिए यूनिट-परीक्षण परिप्रेक्ष्य से समझ में आता है और यह सत्यापित करता है कि कार्रवाई स्वयं अपेक्षा के अनुसार काम करती है। मैं यह भी कहूंगा कि मैं इस बात से असहमत हूं कि किसी प्रकार के स्वचालित परीक्षण सूट में टाइमर की कॉन्फ़िगरेशन को शामिल करने के लिए यह बर्बाद प्रयास है। समय अनुप्रयोगों के साथ काम करने की बात आती है तो बहुत सारे एज केस होते हैं और परीक्षण की आसान चीजों का परीक्षण करके सुरक्षा की झूठी भावना पैदा करना बहुत आसान होता है।

मैं टाइमर के साथ-साथ असली कार्रवाई चलाने वाले परीक्षणों का एक सूट रखने की अनुशंसा करता हूं। इस सूट में शायद थोड़ी देर लगने लगेगा और संभवतः ऐसा कुछ नहीं होगा जो आप अपनी स्थानीय मशीन पर हर समय चलेंगे। लेकिन इन प्रकार की चीजों को एक रात के स्वचालित निर्माण पर सेट करने से वास्तव में खोजने और ठीक करने में बहुत मुश्किल हो जाने से पहले बग को रूट करने में मदद मिल सकती है।

तो संक्षेप में आपके प्रश्न का मेरा जवाब कुछ परीक्षणों को लिखने की चिंता न करें जो लंबे समय तक चलने में लगते हैं। यूनिट परीक्षण जो आप कर सकते हैं और उस टेस्ट सूट को तेज़ और अक्सर चलाते हैं, लेकिन यह सुनिश्चित करना सुनिश्चित करें कि एकीकरण परीक्षणों के साथ जो कम बार चलते हैं लेकिन अधिकतर एप्लिकेशन और इसकी कॉन्फ़िगरेशन को कवर करते हैं।

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