परीक्षण करते समय चर को ओवरराइड करें हमारे पर्यावरण में एक पर्ल स्क्रिप्ट है जिसे अब मुझे बनाए रखने की आवश्यकता है। यह पूरे स्क्रिप्ट में वैश्विक चर का उपयोग (और पुनः उपयोग) सहित बुरी प्रथाओं से भरा है। स्क्रिप्ट में बदलाव करने से पहले, मैं कुछ टेस्ट स्क्रिप्ट लिखने की कोशिश करने जा रहा था, इसलिए मेरे पास एक अच्छा रिग्रेशन बेस हो सकता है। ऐसा करने के लिए, मैं इस page पर वर्णित विधि का उपयोग करने जा रहा था।एक स्टैंडअलोन पर्ल स्क्रिप्ट
मैं एक एकल सबराउटिन के लिए परीक्षण लिखकर शुरू कर रहा था। मैं स्क्रिप्ट के शीर्ष के निकट कुछ हद तक इस लाइन डाल मैं परीक्षण कर रहा हूँ:
return 1 if (caller());
इस तरह, अपने परीक्षण लिपि में, मैं
require 'script_to_test.pl';
और यह पूरी स्क्रिप्ट को निष्पादित नहीं होगा सकते हैं।
पहला सबराउटिन जिसे मैं परीक्षण करने जा रहा था, पूरे स्क्रिप्ट में सेट किए गए वैश्विक चर का बहुत उपयोग करता है। मैं कर रहा हूँ परीक्षण, शीर्ष पर एक बड़े पैमाने पर "मेरा" ब्लॉक है जहां यह वाणी (मेरे लिए)
require_ok('script_to_test.pl');
$var_from_other_script = 'Override Value';
ok(sub_from_other_script());
दुर्भाग्य से, स्क्रिप्ट: मेरे विचार, अपने परीक्षण लिपि में इन चरों ओवरराइड करने के लिए कुछ इस तरह की कोशिश करने के लिए था स्क्रिप्ट में उपयोग किए जाने वाले सभी चर। यह मेरी टेस्ट स्क्रिप्ट को उस स्क्रिप्ट में चर को देखने/बदलने से रोकता है जिसके खिलाफ मैं परीक्षण चला रहा हूं।
मैंने निर्यातक, टेस्ट :: मॉक ... और कुछ अन्य मॉड्यूल के साथ खेला है, लेकिन ऐसा लगता है कि मैं किसी भी चर को बदलने में सक्षम होना चाहता हूं, मुझे कुछ अन्य स्क्रिप्ट को संशोधित करना होगा फैशन।
मेरा लक्ष्य अन्य स्क्रिप्ट को नहीं बदला है, लेकिन कुछ अच्छे परीक्षणों को चलाने के लिए, जब मैं दूसरी स्क्रिप्ट को बदलना शुरू करता हूं, तो मैं सुनिश्चित कर सकता हूं कि मैंने कुछ भी तोड़ नहीं दिया है। लिपि लगभग 10,000 लाइनें (उनमें से 3,000 मुख्य ब्लॉक में) है, इसलिए मुझे डर है कि अगर मैं चीजों को बदलना शुरू करता हूं, तो मैं कोड के अन्य हिस्सों को प्रभावित करूंगा, इसलिए एक अच्छा परीक्षण सूट होने में मदद मिलेगी।
क्या यह संभव है? क्या एक कॉलिंग स्क्रिप्ट "my" के साथ घोषित किसी अन्य स्क्रिप्ट में चर को संशोधित कर सकता है?
और कृपया की तरह जवाब के साथ में कूद नहीं है,,, आदि यही कारण है कि सबसे अच्छा समाधान हो सकता है "बस खरोंच से स्क्रिप्ट फिर से लिखना" लेकिन यह मेरे सवाल का जवाब नहीं है, और हमारे पास पुनः लिखने के लिए समय/संसाधन नहीं हैं।
यह मूल स्क्रिप्ट में न्यूनतम परिवर्तन के साथ पूरी तरह से काम करता है। – BrianH