出力を取得する簡単な方法の 1 つは、prove--archive
フラグを使用することです。これにより、テスト スイートの出力が結果の概要と共に tarball に保存されます。--merge
STDERR がキャプチャされるように、フラグも使用する必要があります。
$ prove --archive test_out.tgz --merge my_test.pl
my_test.pl .. ok
All tests successful.
Files=1, Tests=3, 0 wallclock secs ( 0.01 usr 0.00 sys + 0.01 cusr 0.00 csys = 0.02 CPU)
Result: PASS
TAP Archive created at /home/you/test_out.tgz
余暇に読み込めるようになったら、TAP::Parser で再解析し、好きなように処理します。
use TAP::Parser;
my $tap_file = shift;
open my $tap_fh, $tap_file or die $!;
# Can't just pass in the .t file, it will try to execute it.
my $parser = TAP::Parser->new({
source => $tap_fh
});
while ( my $result = $parser->next ) {
# do whatever you like with the $result, like print it back out
print $result->as_string, "\n";
}
何らかの理由で証明を使用できない/使用しない場合は、キャプチャ コードをスクリプトに挿入できます。すべてのテストスクリプトに対してこれを行う必要があるため、これに対して強くお勧めします。テストにハードコーディングする必要があるため、通常のテストではあまり役に立ちません(つまり、prove または Test::Harness を介してテストを実行します)単なるラッパーです))。また、テスト出力だけでなく、STDERR または STDOUT に出力されるすべての警告など、テストの完全な出力を確実にキャプチャするために、いくつかの高度なフットワークを実行する必要があります。
これを説明する前に、手動でテスト プログラムを実行しているので (そうすべきではありません)、bash シェルを使用して実行する方法を次に示します。
perl my_test.pl > test.out 2>&1
それがうまくいく場合は、それを使用してください。スクリプトにハードコーディングする価値はありません。
上記の TAP::Harness スクリプトのようなものを使用して test.out を処理し、意味を理解する必要がありますが、それによってプログラムの完全な出力がキャプチャされます。シェルのリダイレクトを使用すると、これを 1 つのステップで実行できます。
perl my_test.pl 2>&1 | tap2oo
tap2oo は、TAP を Open Office ドキュメントに変換するプログラムです。