2012-01-16 11 views
5

के बिना stdout को लिखता है, जब मैं prove उपयोगिता का उपयोग करके एक पेर्ल परीक्षण चलाता हूं, तो यह विफल रहता है कि परीक्षण के तहत विधि में print कथन शामिल हैं जो न्यूलाइन द्वारा समाप्त नहीं किए जाते हैं।टेस्ट साबित होता है कि यह बिना किसी न्यूलाइन

use Test::More tests=>1; 

ok(foo(), "calling foo"); 

sub foo{ 
    print "A"; 
    1; 
} 

यह

Bad plan. You planned 1 tests but ran 0. 

में परिणाम अगर मैं एक नई पंक्ति संलग्न: print "A\n"; परीक्षण गुजरता है।

(ध्यान दें कि अगर मैं prove का उपयोग करने के बजाय परीक्षण perl mytest.t निष्पादित करता हूं तो यह किसी भी तरह से गुजरता है)।

कोई विचार यह क्यों हो सकता है, और इसके आसपास कैसे काम करना है?

+5

देखें http://stackoverflow.com/q/1538260/1030675 'प्रिंट' का आउटपुट 'साबित' अपेक्षाओं में हस्तक्षेप करता है। – choroba

उत्तर

2

मैं एक त्वरित समाधान का पाया:

$|=0;  # no auto-flush 

... लेकिन मुझे पता नहीं (अभी तक) है क्यों यह काम करता है।

+0

धन्यवाद यह काम करता है और stdout आदि को स्थानीयकृत करने से आसान है मैं देख सकता हूं कि जब मैं ऐसा करता हूं, वर्बोज़ स्विच सक्षम होने के साथ, परीक्षण प्रिंट स्टेटमेंट 'OK - test pass' लाइन' के बाद लाइन पर दिखाई देता है, जबकि पहले वे एक ही पंक्ति पर दिखाई दिए। यह लगभग है कि अगर साबित होता है कि यह साबित करते समय 'साबित' अपने स्वयं के आउटपुट को पार्स कर रहा था कि परीक्षण रन 100% पारित हो गया है या नहीं। (ध्यान दें कि मूल परीक्षण प्रति से असफल नहीं हो रहा था, बल्कि 'साबित' परीक्षणों की संख्या को टैल करते समय इसे छूट दे रहा था।) – perlyking

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