TAP ::线束perl测试tee输出

问题描述:

我正在运行我的测试,使用TAP :: Harness,当我在Linux系统上从命令行运行测试时我在STDOUT上运行测试结果,因为它正在运行,但是当我尝试使用perl harness.pl |捕获输出到文件以及STDOUT结果缓冲和显示只在最后,我试着传递一个新的文件句柄,但结果仍然被写入到文件之前缓冲,有没有办法缓冲输出,我有一个长期运行的套件,并希望在测试运行的同时查看结果以及捕获输出。TAP ::线束perl测试tee输出

TAP ::线束版本3.22和perl版本5.8.8

这里是示例代码 harness.pl

#!/usr/bin/perl 
use strict; 
use warnings; 
use TAP::Harness; 
$|++; 

my @tests = ('del.t',); 


my $harness = TAP::Harness->new({ 
    verbosity => 1, 
}); 
$harness->runtests(@tests); 

和测试del.t

use Test::More qw /no_plan/; 
$|++; 

my $count =1; 
for (1 ..20) { 
    ok ($count ++ == $_, "Pass $_"); 
    sleep 1 if ($count % 5 == 0) ; 
} 

使用script而不是tee做你想做的事:

script -c 'perl harness.pl' file 

找到一个简单的变化,使T恤的工作,以及:指定formatter_class

my $harness = TAP::Harness->new({ 
    verbosity => 1, 
    formatter_class => 'TAP::Formatter::Console', 
}); 

这是因为TAP::Harness通常使用不同的默认的,如果输出是不是tty,这是什么原因造成你看到的缓冲。