2013-10-06 15 views
1

我正在嘗試整天找出答案,但我沒有找到任何東西。 我用測試編寫了一些測試::更多(test1.t,test2.t,test3.t ...)。我寫了一個主Perl腳本(main.pl),它使用TAP :: Harness處理所有測試,並使用formatter_class =>'TAP :: Formatter :: JUnit以JUnit格式輸出輸出。 在我的測試中,我使用BAIL_OUT函數。 問題是,當一個測試被釋放時,主腳本也會退出並且根本沒有輸出。例如,如果test3.t bailed_out,我需要看到test1.t和test2.t的結果。我怎樣才能做到這一點?使用TAP :: Harness處理測試時,如何在測試退出時打印輸出

我不能使用exit或die而不是BAIL_OUT,因爲我不想讓其他測試繼續。 (如果test3.t是BAIL_OUT,我不想讓test4.t運行。)

有人可以幫我嗎? 我需要查看在執行保護測試之前運行的測試的結果。

謝謝。

回答

0

按照Test::More文檔:

BAIL_OUT($理由);

表示事情進展如此糟糕,所有測試應該終止。
這包括運行任何其他測試腳本。

因此,這就解釋了您的套件中止的原因。

根據BAIL_OUT的原因,您可能要考慮die_on_failTest::Mostskip_all

編輯:看起來像的Test :: Builder不具備打印出一個概要的打算時,它的「災難性的失敗」 according to the source code退出:

sub BAIL_OUT { 
    my($self, $reason) = @_; 

    $self->{Bailed_Out} = 1; 
    $self->_print("Bail out! $reason"); 
    exit 255; 
} 

# Don't do an ending if we bailed out. 
if($self->{Bailed_Out}) { 
    $self->is_passing(0); 
    return; 
} 

然而,Bailed_Out標誌永遠只能用於考慮打印出摘要診斷,並且由於Test::More公開了底層Test::Builder對象,因此您可能只需調整BAIL_OUT子例程並且不設置此標誌。所有未經測試的,當然;因人而異。

+0

但是我確實需要BAIL_OUT,因爲我不需要運行所有其他測試。如果我使用死或跳過,其他測試將繼續運行。當測試失敗時,我使用BAIL_OUT,因爲整個構建失敗並且沒有理由繼續測試。 套件可以中止,但是我可以看到在我保護之前運行的測試結果嗎? – user1836185

+0

,我希望只有相關的測試套件纔會中止,爲什麼以前所有測試套件的主要腳本都需要消失? – user1836185

+0

這聽起來不錯,但我該如何更改標誌值? – user1836185

0

而是在所有測試中傳遞給一個TAP ::線束,你需要在時間的線束在一個測試通過在BAIL_OUT的情況下

我還沒有看到你的代碼,所以這裏是我的意思是一個樣本。調整以包括格式化程序和其他任何你需要的。

use TAP::Harness; 

my $harness = TAP::Harness->new({ merge => 0 }); 
my $tests = ['t/test1.t', 't/test2.t']; 

foreach my $test (@$tests) { 
    eval { 
     $harness->runtests([$test]); 
    }; if ([email protected]) { 
     # create new harness object if the previous fails catastrophically. 
     $harness = TAP::Harness->new({ merge => 0 }); 
    } 
} 
相關問題