2

TAP::Harness を使用してテストを実行しています。Linux システムでコマンド ラインからテストを実行すると、実行時に STDOUT でテスト結果が得られますが、ファイルへの出力と STDOUT を使用してキャプチャしようとすると、パールハーネス.pl | tee out.tap 結果はバッファリングされ、最後にのみ表示されます。ファイル ハンドルを new に渡そうとしましたが、結果はファイルに書き込まれる前にまだバッファリングされています。出力をバッファリングしない方法はありますか?長期実行スイートであり、テストの実行中に結果を確認し、出力をキャプチャしたいと考えています。

TAP::Harness バージョン 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 ) ;
}
4

1 に答える 1

5

scriptの代わりに使用すると、tee必要なことが行われます。

script -c 'perl harness.pl' file

ティーを同様に機能させるための簡単な変更を見つけました: 次を指定しformatter_classます。

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

これはTAP::Harness、出力が tty でない場合、通常は別のデフォルトのものを使用するためです。これが、表示されているバッファリングの原因です。

于 2011-02-23T22:10:26.600 に答える