测试失败,证明它是否写入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
它会以任一方式通过)。
任何想法,为什么这可能是,以及如何解决它?
答
我找到了一个快速的解决方法:
$|=0; # no auto-flush
...但我不知道(但)为什么这个工程。
+0
感谢这个工程,比本地化标准输出等更简单 我可以看到,当我这样做,与详细开关启用,测试打印语句出现在一行_after_'好 - 测试通过线,而之前他们出现在同一条线上。 在决定测试运行是否已通过100%时,就好像'证明'是在解析自己的输出。 (请注意,原始测试本身并没有失败;相反,在测试运行次数时,“验证”会对其进行折扣。) – perlyking 2012-01-16 15:19:22
请参阅http://*.com/q/1538260/1030675 “print”的输出会干扰“证明”期望的内容。 – choroba 2012-01-16 12:56:22