2011-03-17 10 views
9

क्या नेस्टेड फ़ंक्शन का परीक्षण करने का कोई तरीका है (आदर्श रूप से स्कैलाटेस्ट के साथ)?क्या आप स्केल में नेस्टेड फ़ंक्शंस का परीक्षण कर सकते हैं?

उदाहरण के लिए, नीचे दिए गए कोड में g() परीक्षण करने के लिए एक तरीका है:

def f() = { 
    def g() = "a string!" 
    g() + "– says g" 
} 

उत्तर

8

gf के दृश्य के बाहर नहीं है, इसलिए मैं कोई हिम्मत करना, कम से कम प्रतिबिंब के बिना नहीं।

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

यदि g परीक्षण आपके लिए महत्वपूर्ण है, तो g को f के बाहर (संरक्षित) विधि के रूप में परिभाषित करें। हालांकि, यह आपके डिजाइन को तोड़ सकता है।

एक और विचार मूल कोड में g के कॉल के बाद assert पर कॉल करना होगा। यह परीक्षण के दौरान निष्पादित किया जाएगा और संपत्ति अपरिवर्तित नहीं होने पर अपवाद बढ़ाएगी, जिससे परीक्षण विफल हो जाएगा। यह नियमित कोड में भी होगा, लेकिन संकलक द्वारा assert (और साथी) के रूप में हटाया जा सकता है (उदा। here देखें)।

+2

+1: मैं पूरी तरह से सहमत हूं। चूंकि आप * 'g()' को कॉल नहीं कर सकते हैं, इसलिए आपको इसके बारे में चिंता करने की आवश्यकता नहीं है - जब तक 'f()' सही तरीके से व्यवहार करता है, इससे कोई फर्क नहीं पड़ता कि विवरण क्या हैं। परिभाषित करने और फिर 'g' को कॉल करने या केवल कोड को ऑनलाइन निष्पादित करने के लिए कोई वैचारिक अंतर नहीं है; यह एक आंतरिक पुस्तक-रखरखाव माप है जो कोड शुद्धता के लिए अप्रासंगिक है। 'एफ' परिणाम की गणना करने के लिए यूनिकॉर्न प्राप्त करके काम कर सकता है; जब तक परिणाम सही था और समय पर फैशन (और कोई बाहरी बाहरी निर्भरता के साथ) में पहुंचा, तो यह हुड के नीचे देखने के लिए इकाई परीक्षण का काम नहीं है। –

+1

@AndrzejDoyle लेकिन अगर मैं सिर्फ विकास को गति देना चाहता हूं (डीबगिंग से बचें) और चरण-दर-चरण चरण का परीक्षण करें ... मुझे लगता है कि यह समस्या http://stackoverflow.com/questions/34571/whats-the-proper- रास्ते-से-परीक्षण-ए-क्लास-साथ-निजी-विधियों-उपयोग-जूनिट – ichaki5748

+2

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

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

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