测试失败,证明它是否写入stdout而不换行

问题描述:

当我使用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://*.com/q/1538260/1030675 “print”的输出会干扰“证明”期望的内容。 – choroba 2012-01-16 12:56:22

我找到了一个快速的解决方法:

$|=0;  # no auto-flush 

...但我不知道(但)为什么这个工程。

+0

感谢这个工程,比本地化标准输出等更简单 我可以看到,当我这样做,与详细开关启用,测试打印语句出现在一行_after_'好 - 测试通过线,而之前他们出现在同一条线上。 在决定测试运行是否已通过100%时,就好像'证明'是在解析自己的输出。 (请注意,原始测试本身并没有失败;相反,在测试运行次数时,“验证”会对其进行折扣。) – perlyking 2012-01-16 15:19:22