2012-02-19 16 views
13

मैं कुछ रूबी कोड का परीक्षण कर रहा हूं और एक असफल टेस्ट :: यूनिट :: टेस्टकेस है। दुर्भाग्यवश, विफलता रिपोर्ट केवल मुझे शीर्ष त्रुटि देता है, न कि पूर्ण स्टैक ट्रेस। विशेष रूप से, यह कहते हैं:टेस्ट से स्टैक ट्रेस कैसे प्राप्त करें :: यूनिट :: टेस्टकेस

1) Failure: 
test_tp_make(TestScripts::TestTpMake) [test/test_scripts.rb:73]: 
Exception raised: 
<#<NoMethodError: undefined method `[]' for nil:NilClass>>. 

संदर्भित (73) लाइन नंबर अपने परीक्षण मामले, जो बारी में एक और कोड ब्लॉक, जो बारी में एक बड़ा पुस्तकालय करने के लिए कहता है शुरू होता है में एक assert_nothing_raised कोड ब्लॉक की शुरुआत है।

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

मैं परीक्षण से असफल कोड निकाल सकता हूं और इसे टेस्ट :: यूनिट के बाहर चला सकता हूं, जिससे मुझे सभी आउटपुट देखने में मदद मिलती है। लेकिन हर बार जब मैं असफल परीक्षण करता हूं तो ऐसा करना दर्द होगा।

क्या कोई जानता है कि टेस्ट :: यूनिट को मुझे एक पूर्ण स्टैक ट्रेस देने के लिए कैसे प्राप्त किया जाए?

+0

क्या आप 'रेक' के साथ अपना परीक्षण चला रहे हैं? – Casper

+0

नहीं, रेक नहीं चल रहा है। –

+0

यह रूबी 1.8, रुबी 1.9, या दोनों में था? –

उत्तर

14

रूबी 1.8 में टेस्ट :: यूनिट के कोड के माध्यम से देखकर, ऐसा लगता है कि सभी त्रुटियां टेस्ट :: यूनिट :: त्रुटि ऑब्जेक्ट के माध्यम से जाती हैं जो #long_display विधि में बैकट्रैक फ़िल्टर करती है। कोई विन्यास नहीं है और सभी धावक एक ही फ़िल्टर किए गए ट्रेस का उपयोग करेंगे।

ब्रूट बल बंदर पैच पूरे निशान पाने के लिए: (मैं अपने एकल परीक्षण का मामला फ़ाइल में इस डाल, शायद आप एक परीक्षण सहायक में रख सकता है) रूबी 1.9 के लिए

require 'test/unit/util/backtracefilter' 

module Test::Unit::Util::BacktraceFilter 
    def filter_backtrace(backtrace, prefix=nil) 
    backtrace 
    end 
end 

और बंदर पैच (जो minitest का उपयोग करता है)

def MiniTest.filter_backtrace(bt) 
    bt 
end 
+0

+1 आपने मेरा जीवन बचाया! _ (या कम से कम स्वच्छता) _ :-) – Arsen7

1

पूर्ण स्टैक ट्रेस प्राप्त करने के लिए कक्षा में कहीं भी इसका उपयोग करें। मैंने अपनी यूनिट टेस्ट केस में अपनी टेस्ट क्लास डीबग करने के लिए इसका इस्तेमाल किया।

rescue => e 

puts e.inspect 

puts e.backtrace 
+0

आपका समाधान ठीक है, लेकिन समस्या यह है कि यह टेस्ट :: यूनिट के अस्तित्व की आवश्यकता को अस्वीकार कर देगा - आप सभी अपवादों का मैन्युअल रूप से पता लगाने का सुझाव देते हैं। सवाल यह था कि टेस्ट :: यूनिट को फिर से उपयोगी कैसे करें। – Arsen7