我有一個使用Test::More編寫的Perl測試腳本。退出前,如果所有測試都通過了,我想執行一些清理操作。如果有任何測試失敗,我想將所有內容都留下來進行故障排除。我可以告訴所有測試是否在Perl的Test :: More下傳遞?
Test::More或單個測試腳本中的其他一些最佳實踐中是否存在標誌,以便在測試完成後判斷「一切正常」?
我有一個使用Test::More編寫的Perl測試腳本。退出前,如果所有測試都通過了,我想執行一些清理操作。如果有任何測試失敗,我想將所有內容都留下來進行故障排除。我可以告訴所有測試是否在Perl的Test :: More下傳遞?
Test::More或單個測試腳本中的其他一些最佳實踐中是否存在標誌,以便在測試完成後判斷「一切正常」?
您可以通過Test::More->builder
訪問與Test::Builder測試的當前狀態,可用:
use strict;
use warnings;
use Test::More tests => 1;
ok(int rand 2, 'this test randomly passes or fails');
if (Test::More->builder->is_passing)
{
print "hooray!\n";
}
else
{
print "aw... :(\n";
}
或者,你可以做你清理在腳本的末尾,但退出的早期,如果事情出差錯,與Test::More
的BAIL_OUT("reason why you are bailing");
。
有很多其他數據和統計信息可以收集有關您的測試狀態;請參閱Test::Builder的文檔。
這是我爲了避免在這個答案的底部顯示「無法找到對象的方法」錯誤走過來:
#! /usr/bin/perl
use strict;
use warnings;
use Test::More tests => 1;
ok(int rand 2, 'this test randomly passes or fails');
my $FAILcount = 0;
foreach my $detail (Test::Builder->details()) {
if (${%$detail}{ok}==0) { $FAILcount++; }
}
if ($FAILcount == 0) {
print "hooray!\n";
} else {
print "aw... :(\n";
}
在Solaris 10上,用Perl v5.8.4( 31個註冊補丁),我得到了以下
Can't locate object method "is_passing" via package "Test::Builder"
您需要升級您的測試::簡單分佈 - 請參閱其他答案中的註釋。 – Ether 2009-10-02 16:35:51
我知道你在Solaris下,但在ActivePerl上升級Test :: Simple就是這樣。 Test :: Builder在我的Win32 5.10安裝中沒有自己的PPM條目。我花了幾分鐘的時間來追蹤,所以也許這張筆記會爲別人節省時間。 – aczarnowski 2009-10-03 19:17:33
我有無法通過一攬子「測試::生成器」在./put.pl線9 用Perl V5定位對象的方法「is_passing」 .8.4和31個已註冊的修補程序(在Solaris 10上):o( – philant 2009-10-02 12:34:42
我也在Test :: More版本0.8中得到了這個,但是有b etter運氣與測試::更多版本0.93。 – mob 2009-10-02 15:12:50
Test :: Builder-> is_passing()在版本0.89_01中添加,請參閱CHANGES文件:http://cpansearch.perl.org/src/MSCHWERN/Test-Simple-0.94/Changes – Ether 2009-10-02 16:34:44