2010-12-15 11 views
6

मैं सिर्फ इस तरह कुछ तरीकों इकाई परीक्षण की जरूरत है:यूनिट-परीक्षण धागे?

public void start() 
{ 
    myThread.Start(); 
} 

public void stop() 
{ 
    myThread.Abort(); 
} 

मैं कैसे कर सकते हैं कि? मैं स्टार्ट विधि को कॉल कर सकता हूं और IsAlive == सच की जांच कर सकता हूं लेकिन फिर थ्रेड पृष्ठभूमि में काम करता रहता है और अपनी विधि को कॉल करता है। एक और तरीका है कि मैं शुरू करता हूं और फिर तुरंत बंद कर देता हूं लेकिन यह साफ नहीं है क्योंकि यह दो चीजों का परीक्षण कर रहा है। यह इतना आसान है लेकिन अरघ!

उत्तर

0

आप इकाई परीक्षण करने के लिए उन तरीकों आवश्यकता क्यों है? आप क्या सत्यापित करने की कोशिश कर रहे हैं? यदि आप जिस चीज को सत्यापित करने का प्रयास कर रहे हैं, तो क्या अन्य परीक्षण तोड़ेंगे? (आईई यह अन्य परीक्षणों से ढका हुआ है?)

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

2

उन चीजों को बनाना एक अच्छा विचार है जो समय-निर्भर होने के परीक्षण के उद्देश्यों के लिए तुल्यकालिक हो। (वास्तव में गैर-परीक्षण उपयोग में भी समय-निर्भर इंटरैक्शन को स्थानांतरित करना एक अच्छा विचार है।)

यदि आप वास्तव में यह जांचना चाहते हैं कि ये विधियां प्रारंभ और थ्रेड को रोकती हैं, तो मैं एक डमी ऑब्जेक्ट myThread प्रदान करता हूं जो प्रदान करता है उन तरीकों से वास्तव में एक धागा शुरू नहीं होता है, या धागा जिसका कोड बस बैठेगा और कुछ भी किए बिना इंतजार करेगा। फिर आप रिकॉर्ड कर सकते हैं कि यह शुरू हो गया है, और बंद हो गया है, आपके वास्तविक धागे की जटिलता के बारे में चिंता किए बिना।

शायद आपकी स्थिति सिर्फ थ्रेड की जांच करने से अधिक जटिल है? यह आपकी मदद कर सकता है अगर आपने उस प्रकार की चीज़ का थोड़ा बड़ा उदाहरण पोस्ट किया है जिसे आप परीक्षण करना चाहते हैं।

1

मैं BnWasteland से सहमत हूं कि दिए गए कोड उदाहरण के लिए केवल एक चीज परीक्षण कर सकती है वह सिस्टम है। थ्रेडिंग। थ्रेड। स्टार्ट और सिस्टम। थ्रेडिंग। थ्रेड.एबॉर्ट ठीक से काम करते हैं। इसलिए यह मानना ​​उचित होगा कि वे हैं और एप्लिकेशन के अपने कोड पर ध्यान केंद्रित करते हैं। फिर आपके पास दो डोमेन हैं:

1) थ्रेड के अंदर निष्पादित वास्तविक कार्य का कोड। यह एक सामान्य इकाई परीक्षण में परीक्षण किया जा सकता है।

2) सुनिश्चित करें कि बहुप्रचारित आधारभूत संरचना अपेक्षा के अनुसार काम करती है।

(2) एकीकरण परीक्षण श्रेणी में अधिक खर्च करता है लेकिन इसके लिए यूनिट-टेसिटिंग फ्रेमवर्क का उपयोग करने से कोई भी मना नहीं करता है। और इस मामले में स्टार्ट/स्टॉप करना और कुछ यादृच्छिक वर्कलोड के साथ यह कई बार करना ठीक है यह सुनिश्चित करने के लिए कि सिस्टम व्यवहार करता है और काम पूरा करता है। यह स्पष्ट रूप से "लंबे समय से चलने वाले" परीक्षण सूट में जाता है जिसे आप प्रत्येक चेक-इन पर निष्पादित करना नहीं चाहते हैं।

6

चाल आपके तर्क से असीमित व्यवहार को अलग करना है। निरीक्षण करें कि आपका वास्तविक तर्क तुल्यकालिक है, और यह कि अतुल्यकालिक भाग बस कुछ "प्रतीक्षा समय" के बीच में है।

पुस्तक xUnit Test Patterns यह अच्छी तरह से वर्णन करती है। यह एक पैटर्न भी है - Humble Object। यह समझाया जा सकता है कि मैं इससे बेहतर तरीके से कर सकता हूं।

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