काम पर हमारे यूनिट परीक्षणों पर कोड कवरेज की उदासीन स्थिति को महसूस करने के बाद मैं एक उपयोगिता बनाने की कोशिश कर रहा हूं जो हमारे कोड बेस और ध्वज फ़ाइलों को स्कैन करेगा जिसमें 100 नहीं है %।मॉड्यूल में स्पष्ट रूप से परिभाषित विधियों/कार्यों की सूची प्राप्त करें
पहुँच प्रतीक तालिका सीधे:: मैं दो दृष्टिकोण है कि तरीकों के सभी मिल पाया
for my $classname (@ARGV) {
eval "require $classname";
die "Can't load $classname $EVAL_ERROR"
if $EVAL_ERROR;
no strict 'refs';
METHODS:
for my $sym (keys %{ "${classname}::" }) {
next METHODS unless defined &{"${classname}::${sym}"};
print "$sym\n";
}
}
CPAN से Class::Inspector
मॉड्यूल का उपयोग करें:
for my $classname (@ARGV) {
my @methods = Class::Inspector->methods($classname, 'public');
print Dumper \@methods;
}
इन दो दृष्टिकोण इसी तरह के परिणाम का निर्माण किया; इनके साथ समस्या यह है कि वे पूरे मॉड्यूल के लिए उपलब्ध विधियों के सभी दिखाते हैं, न कि उस मॉड्यूल के के अंदर परिभाषित विधियों को न केवल।
क्या मॉड्यूल के लिए सुलभ तरीकों और मॉड्यूल के अंदर स्पष्ट रूप से परिभाषित विधियों के बीच अंतर करने का कोई तरीका है?
नोट: मैं अपने उपयोग के मामले में एक पूर्ण कोड कवरेज परीक्षण बनाने का प्रयास नहीं कर रहा हूं, मैं सिर्फ यह जांचना चाहता हूं कि सभी विधियों को कम से कम एक बार बुलाया गया है। Devel::Cover
जैसे पूर्ण कवरेज परीक्षण हमारे लिए अधिक हैं।
मैं इस समय इस सत्यापित नहीं कर सकता, लेकिन मैं आप की जरूरत लगता है कि [ 'can'] (http://perldoc.perl.org/perlobj.html#The-UNIVERSAL- कक्षा): 'प्रिंट "$ _ \ n" grep $ classname-> कर सकते हैं ($ _), कुंजी% {"$ {classname} ::}" ' – Zaid
आपकी टिप्पणी के लिए धन्यवाद, दुर्भाग्यवश' अभी भी 'लगता है विरासत के पेड़ को देखो। मुझे अभी भी 'डूपर' और हमारे कुछ कस्टम मॉड्यूल के अन्य तरीकों के लिए प्रविष्टियां मिल रही हैं। –
आप 'स्थानीय @ पैकेज :: NAME :: INC =();' 'कॉल कर सकते हैं और फिर 'can()' चेक कर सकते हैं। – frezik