क्या मुझे अपने परीक्षण के तरीकों में ट्राई कैच का उपयोग करना चाहिए?


18

मैं यूनिट परीक्षण कर रहा हूं।

मैं एक फ़ंक्शन का परीक्षण करने की कोशिश कर रहा हूं।

मैं इसे अपने परीक्षण घटक से कहता हूं। लेकिन अगर रिमोट फ़ंक्शन अपवाद को नहीं संभाल सकता है तो मेरे परीक्षक घटक को भी अपवाद मिलेगा, मुझे लगता है।

तो क्या मुझे अपने परीक्षक घटक में अपवाद प्राप्त करने के बारे में चिंता करनी चाहिए?

धन्यवाद।

संपादित करें:

पुनश्च:

एक त्रुटि को फेंकना अच्छा है, लेकिन केवल अन्य कार्यों के लिए, उपयोगकर्ताओं को इसके अंतिम विकल्प तक समाप्त करने के लिए नहीं!

OMG मैंने एक प्रोग्रामिंग उद्धरण लिखा है !!


मैं परीक्षण के लिए नया हूं, और मुझे केवल फ़ंक्शन के व्यवहार का परीक्षण करना चाहिए। मुझे लगता है कि इसे ब्लैकबॉक्स और व्हाइटबॉक्स परीक्षण कहा जाता है। ओह मुझे याद है। मैंने कॉलेज में पढ़ाई की!
विकास

आप विशेष रूप से किस भाषा और xUnit ढांचे का उपयोग कर रहे हैं? मैं कुछ मामलों में हाँ कहूँगा।
ग्रेग के

मैं उपयोग कर रहा हूँ MXUnit साथ MockBox और ColdBox ColdFusion भाषा के लिए।
विकास

जवाबों:


23

संक्षिप्त उत्तर: नहीं।

इकाई परीक्षणों में अपवादों को न पकड़ें। आप त्रुटियों और स्थितियों को खोजने के लिए इकाई परीक्षण कर रहे हैं, जहां अपवाद उठाए गए हैं।

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


मुझे लगता है कि उन्नत परीक्षण ढांचा अपवाद को अच्छी तरह से संभाल सकता है, यहां तक ​​कि मुझे लगता है कि दृश्य स्टूडियो में हम अपवादों के खिलाफ परीक्षण कर सकते हैं जैसे कि आपने "अपेक्षित अपवाद" कहा। तो यह जानने और साझा करने के लिए अच्छा है। धन्यवाद ..
विकास

शायद ही कभी, आप जांचना चाहते हैं कि क्या एक अपवाद को फेंक दिया गया है, क्योंकि अच्छा परीक्षण परीक्षण नहीं करता है केवल मामले काम करते थे, लेकिन ऐसे मामले भी जब आप विफल होते हैं।
डेडलिंक

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

1
@ जेंटिंग दूसरा पैराग्राफ पढ़ें - यूनिट टेस्टिंग फ्रेमवर्क अपवादों को पकड़ते हैं और यदि कुछ अपवादों को उठाया जाता है तो टेस्ट पास करने की अनुमति देते हैं और यदि वे नहीं हैं तो असफल हो जाते हैं
एमसीटीएल

5

(Mcottle के उत्तर के विपरीत) लंबा उत्तर: नहीं ... अधिकांश समय

जब आप कहते हैं कि आप किसी विशेष अपवाद को बढ़ाने के लिए परीक्षण की अपेक्षा करते हैं, तो आपको पता चलेगा कि उस परीक्षण में कोई भी रेखा उस विशेष अपवाद को उठाती है।

यह जानने के समान नहीं है कि परीक्षण के तहत विधि अपवाद को फेंक देती है।

यदि आपके परीक्षण में एक वस्तु या संदर्भ स्थापित करना शामिल है (परीक्षण के भीतर, आपके ढांचे के संस्करण के भीतर नहीं SetUp), तो आप एकल लाइन को लपेटने से बेहतर हो सकते हैं जिसे आप वास्तव में एक कोशिश / पकड़ में परीक्षण करना चाहते हैं, संभवतः एक सहायक के साथ।

उदाहरण के लिए,

public static class AssertHelper {
    public delegate void Thunk();

    public static void DoesNotThrow<T>(Thunk thunk, string message = "")
        where T: Exception {
        try {
            thunk.Invoke();
        } catch(T) {
            Assert.Fail(message);
        }
    }
}

और फिर

[TestMethod]
public void assertHelperInAction() {
    // Random setup stuff here that's too annoying to put in my SetUp
    // method.
    AssertHelper.DoesNotThrow<IllegalArgumentException>(() =>
        {/* My random method under test */})
}

यदि यह परीक्षण विफल हो जाता है, तो मुझे पता है कि परीक्षण के तहत मेरे तरीके ने अपवाद को फेंक दिया, और यादृच्छिक सेटअप सामान में कुछ नहीं।

(आपको यादृच्छिक सेटअप सामान से बचने की कोशिश करनी चाहिए। कभी-कभी, परीक्षण में कुछ सेटअप कोड रखना आसान होता है।)


अच्छा उदाहरण! मैं केवल सटीक परीक्षण के लिए "परीक्षण" चरण को सीमित करने के बारे में बहुत सावधान रहने की कोशिश करता हूं, लेकिन मैं इस चाल को याद रखूंगा जब मैं बस उस पुल को खींचने का तरीका नहीं समझ सकता (जैसे, जब एक दौड़ की स्थिति के लिए परीक्षण कर रहा हूं और शर्त को पूरा करने के लिए 'परीक्षण' के करीब 'सेटअप' की जरूरत है)।
एथेल इवांस

1

सामान्य तौर पर, आपको केवल अपवाद को छोड़ देना चाहिए, और परीक्षण की रूपरेखा आपको सभी आवश्यक जानकारी के साथ एक अच्छी रिपोर्ट देगी।


लेकिन टीडीडी पद्धति में, हमें उन चरणों का पालन करने की उम्मीद है:

  1. एक परीक्षण लिखें
  2. इसे विफल देखें, और त्रुटि को समझने योग्य बनाएं
  3. कोड को ठीक करें
  4. कोड और परीक्षण को रिफलेक्टर करें

जब आप अपवाद छोड़ देते हैं, यदि त्रुटि स्पष्ट है, तो यह ठीक है। लेकिन कभी-कभी अपवाद अस्पष्ट, या यहां तक ​​कि गुमराह करने वाला होता है। आप इसे अपने कोड में कैसे कर सकते हैं (आपके लिए बाद में जब आप भूल गए होंगे, या टीम के सदस्य के लिए जो समस्या का पता लगाने में बड़ा समय खो देगा)? इसलिए मेरी नीति है: " यदि विफलता को स्पष्ट करना आवश्यक है, तो आपको अपवाद को पकड़ने की आवश्यकता है "।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.