我正在使用 TAP::Harness 运行测试,当我在 Linux 系统上从命令行运行测试时,我会在运行时在 STDOUT 上获得测试结果,但当我尝试将输出捕获到文件时使用 perlharness.pl 作为 STDOUT | tee out.tap 结果被缓冲并仅在最后显示,我尝试将文件句柄传递给新文件,但结果在写入文件之前仍然被缓冲,有没有办法不缓冲输出,我有一个长时间运行的套件,希望在测试运行时查看结果并捕获输出。
TAP::Harness 版本 3.22 和 perl 版本 5.8.8
这里是示例代码 线束.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
发现一个简单的更改可以使 tee 也正常工作:指定一个 formatter_class
:
my $harness = TAP::Harness->new( {
verbosity => 1,
formatter_class => 'TAP::Formatter::Console',
} );
这是因为如果输出不是 tty,TAP::Harness
通常会使用不同的默认值,这就是导致您看到的缓冲的原因。
关于linux - TAP::Harness perl 测试 tee 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5097761/