【问题标题】:Can I tell if all tests passed under Perl's Test::More?我可以判断是否所有测试都通过了 Perl 的 Test::More 吗?
【发布时间】:2009-10-02 22:34:45
【问题描述】:

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

Test::More 中是否有一个标志,或者在单个测试脚本中是否有其他一些最佳实践,以便在测试本身完成后判断“一切正常”?

【问题讨论】:

    标签: perl unit-testing


    【解决方案1】:

    您可以通过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::MoreBAIL_OUT("reason why you are bailing");

    您可以收集许多其他关于测试状态的数据和统计信息;请参阅Test::Builder 的文档。

    【讨论】:

    • 我在 ./put.pl 第 9 行的包“Test::Builder”中找不到对象方法“is_passing”。使用 Perl v5.8.4 和 31 个注册补丁(在 Solaris 10) :o(
    • 我在 Test::More 0.8 版中也遇到了这个问题,但在 Test::More 0.93 版中运气更好。
    • Test::Builder->is_passing() 已在 0.89_01 版本中添加,请参阅更改文件:cpansearch.perl.org/src/MSCHWERN/Test-Simple-0.94/Changes
    【解决方案2】:

    这是我为了避免此答案底部显示的“无法定位对象方法”错误而提出的:

    #! /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"
    

    【讨论】:

    • 您需要升级您的 Test::Simple 发行版 - 请参阅其他答案中的说明。
    • 我知道你在 Solaris 下,但是在 ActivePerl 上升级 Test::Simple 是一种方式。 Test::Builder 在我的 Win32 5.10 安装中没有自己的 PPM 条目。我花了几分钟才找到,所以也许这个笔记会节省其他人的时间。
    猜你喜欢
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 2023-03-06
    • 2018-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多