2012-01-16 69 views
5

當我使用prove實用程序運行perl測試時,如果測試方法包含print未被換行符終止的語句,則失敗。測試失敗,證明它是否寫入stdout而不換行

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";測試通過。 (請注意,如果我只是執行測試perl mytest.t而不是使用prove它會以任一方式通過)。

任何想法,爲什麼這可能是,以及如何解決它?

+5

請參閱http://stackoverflow.com/q/1538260/1030675 「print」的輸出會干擾「證明」期望的內容。 – choroba 2012-01-16 12:56:22

回答

2

我找到了一個快速的解決方法:

$|=0;  # no auto-flush 

...但我不知道(但)爲什麼這個工程。

+0

感謝這個工程,比本地化標準輸出等更簡單 我可以看到,當我這樣做,與詳細開關啓用,測試打印語句出現在一行_after_'好 - 測試通過線,而之前他們出現在同一條線上。 在決定測試運行是否已通過100%時,就好像'證明'是在解析自己的輸出。 (請注意,原始測試本身並沒有失敗;相反,在測試運行次數時,「驗證」會對其進行折扣。) – perlyking 2012-01-16 15:19:22