2009-08-28 81 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

你可能想看看在使用內置「prove」工具,它充當圍繞你的測試線束。注意: 「diag()」 和 「note()」 之間的差異(在Test::More定義):

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」 運行,你會看到:

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」 運行,你會看到這個(在尼斯憤怒的紅色一些文本):

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」無線網絡的標準錯誤輸出會是:

# 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運行測試統計數據。讓我們看看會發生什麼,當我們利用我們上面寫的測試腳本:

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

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

產生了輸出:

# 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 
         } 
      }, 
      {} 
     ]; 
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 

我需要舊的結果,所以我加入

>

在result.txt前創建輸出文件。如果您希望收到新鮮結果的情況下作出的代碼:

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