我有一个使用Test::More编写的Perl测试脚本。在退出之前,如果所有测试都通过,我想执行一些清理操作。如果任何测试失败,我想留下一切用于故障排除。
在Test::More内是否有一个标志,或者在单个测试脚本中有其他一些最佳实践,一旦测试本身完成,就会告诉“一切顺利”吗?
答案 0 :(得分:10)
您可以Test::Builder使用Test::More->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
的{{1}}。
您可以收集许多有关测试状态的其他数据和统计信息;请参阅Test::Builder的文档。
答案 1 :(得分:0)
为了避免在这个答案的底部显示“无法找到对象方法”错误,我采取了以下措施:
#! /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"