2009-08-28 13 views
3

私は、合格と不合格のテストケースの数を教えてくれる簡単なテストオートメーションスイートを作成しています。以下のコードを記述する簡単な例です:PerlのTest :: Simpleのテスト出力をどのようにリダイレクトできますか?

#! /usr/bin/perl -w 

use Test::Simple tests => 1; 

print "Enter the name of the Book: "; 
$name = <STDIN>; 
chomp($name); 

print "You have entered $name \n"; 

$ori_name = "TextBook"; 

chomp($ori_name); 

ok($name eq $ori_name, 'Checking name'); 

次のように私は、入力として「テキストボックス」を入力した後に取得しています出力は次のとおりです。

​​

私は同じ出力をリダイレクトしたいと思います私は次のサブルーチンを追加した場合

ok 1 - Checking name 

ようになっているはずのファイル

log_message (ok ($name eq $ori_name, 'Checking name'); 


sub log_message 
{ 
    my $message = @_; 

    open(DA, '>>PJ.txt') or die "Couldn't open file PJ.txt"; 

    print DA $message; 

    close (DA); 
} 

次に、「1」または「0」のいずれかが表示されます。希望のテキストではありません。その上

ok 1 - Checking name 

ok 2 - Checking others 

と:私のコードの結果は次の形式を持つ必要があり、ファイルにリダイレクトするように、私はどのように進めるべき

答えて

4

:あなたは、新鮮な結果を受信したい場合は場合のようにコードを作ります。

1..3 
# My awesome test suite 
# This message won't be visible when run via the harness 
ok 1 - test 1 
ok 2 - test 2 
not ok 3 - test 3 
# Failed test 'test 3' 
# at foo.pl line 10. 
# all done! 
# Looks like you failed 1 test of 3. 

"prove mytest.pl" を介して実行すると、:あなたは、これが表示されます、

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

diag "My awesome test suite"; 
note "This message won't be visible when run via the harness"; 

ok(1, "test 1"); 
ok(1, "test 2"); 
ok(0, "test 3"); 

diag "all done!"; 

"perl mytest.pl" を介して実行します(Test::Moreで定義された) "diag()" と "note()" との違いに注意してください。

foo.pl .. # My awesome test suite 
foo.pl .. 1/3 
# Failed test 'test 3' 
# at foo.pl line 10. 
# all done! 
# Looks like you failed 1 test of 3. 
foo.pl .. Dubious, test returned 1 (wstat 256, 0x100) 
Failed 1/3 subtests 

Test Summary Report 
------------------- 
foo.pl (Wstat: 256 Tests: 3 Failed: 1) 
    Failed test: 3 
    Non-zero exit status: 1 
Files=1, Tests=3, 0 wallclock secs (0.03 usr 0.01 sys + 0.01 cusr 0.01 csys = 0.06 CPU) 
Result: FAIL 

prove mytest.pl > stdout.txt」のwiのstderr出力:あなたは、この(素敵な怒り赤でいくつかのテキストを持つ)が表示されますできるでしょう:

# My awesome test suite 

# Failed test 'test 3' 
# at foo.pl line 10. 
# all done! 
# Looks like you failed 1 test of 3. 

ALSO 、独自のテストハーネスを作成して、あなただけのTest::Harnessで走ったテストに関する統計を収集することができます。

# My awesome test suite 

foo.pl .. 1/3 


# Failed test 'test 3' 

# at foo.pl line 10. 

# all done! 

# Looks like you failed 1 test of 3. 


foo.pl .. 
Dubious, test returned 1 (wstat 256, 0x100) 


Failed 1/3 subtests 


$VAR1 = [ 
      { 
      'files' => 1, 
      'max' => 3, 
      'bonus' => 0, 
      'skipped' => 0, 
      'sub_skipped' => 0, 
      'ok' => 2, 
      'bad' => 1, 
      'good' => 0, 
      'tests' => 1, 
      'bench' => bless([ 
           0, 
           '0.02', 
           '0.01', 
           '0.01', 
           '0.01', 
           0 
           ], 'Benchmark'), 
      'todo' => 0 
      }, 
      { 
      'foo.pl' => { 
          'name' => 'foo.pl', 
          'max' => 3, 
          'canon' => '3', 
          'wstat' => '256', 
          'failed' => 1, 
          'estat' => 1 
         } 
      }, 
      {} 
     ]; 

use strict; 
use warnings; 
use Test::Harness; 
use Data::Dumper; 

my @results = Test::Harness::execute_tests(tests => ["mytest.pl"]); 
print Dumper(\@results); 

出力が得られます。我々は上に書いたテストスクリプトを活用する際の何が起こるか見てみましょう

0

私は、結果の出力を取得するには、コードに次のように追加:

use Test::More; 

my $builder = Test::More->builder->output('>result.txt'); 

次のように結果は次のとおりです。

not ok 1 - Checking Upgrade 
ok 2 - Checking Others 
not ok 1 - Checking Upgrade 
ok 2 - Checking Others 

私は古い結果を必要とするので、私は

を追加しました

output.txtの前に

を置き、出力ファイルを作成します。あなたは、組み込みあなたのテストの周りのハーネスとして機能「prove」ユーティリティを使用して見てみたいことがあり

my $builder = Test::More->builder->output('result.txt'); 
関連する問題