我可以判断Perl的Test :: More下是否通过了所有测试?

时间:2009-10-01 21:41:18

标签: perl unit-testing

我有一个使用Test::More编写的Perl测试脚本。在退出之前,如果所有测试都通过,我想执行一些清理操作。如果任何测试失败,我想留下一切用于故障排除。

Test::More内是否有一个标志,或者在单个测试脚本中有其他一些最佳实践,一旦测试本身完成,就会告诉“一切顺利”吗?

2 个答案:

答案 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"