1

スクリプトの TAP 出力をキャッチし、追加情報を付けて同僚用の openoffice ドキュメントに書き込み、通常の TAP 出力としてコンソールに出力したいと考えています。これは、スクリプト内 (!) で行う必要があります。

私はTAP::Parserが私が行くべき道だと思いますよね?方法がわからず、簡単な例が見つかりません。次のようなスクリプトを取得した場合:

#!/usr/bin/perl

use strict;
use warnings;
use Test::More tests => 2;

is( 1 + 1, 2, "one plus one is two" );
#missing code to capture the result of the test above

is( 1 + 1, 11, "one plus one is more than two" );
#missing code to capture the result of the test above

各テストの結果を取得するにはどうすればよいですか? openoffice ドキュメントを作成することは問題ではありません。

TAP::Parser は私がやりたいことをする正しい方法ですか?

どうも

ロリ

4

2 に答える 2

2

出力を取得する簡単な方法の 1 つは、prove--archiveフラグを使用することです。これにより、テスト スイートの出力が結果の概要と共に tarball に保存されます。--mergeSTDERR がキャプチャされるように、フラグも使用する必要があります。

$ 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 ドキュメントに変換するプログラムです。

于 2012-12-08T22:32:08.237 に答える
1

App::Proveのプラグインを作成できます。良い参照/出発点はTest::Prettyです。

于 2012-12-08T20:28:14.057 に答える