【问题标题】:handle tests using TAP::Harness, how to print output when test exits使用 TAP::Harness 处理测试,如何在测试退出时打印输出
【发布时间】:2013-10-06 15:03:18
【问题描述】:

我整天都在努力寻找答案,但我什么也没找到。 我使用 test::more (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 的结果。我该怎么做?

我不能使用 exit 或 die 代替 BAIL_OUT,因为我不希望其他测试继续进行。 (如果 test3.t 是 BAIL_OUT,我不希望 test4.t 运行。)

有人可以帮我吗? 我需要查看在救助测试之前运行的测试的结果。

谢谢。

【问题讨论】:

    标签: perl testing junit formatter tap-harness


    【解决方案1】:

    根据Test::More 文档:

    BAIL_OUT($reason);

    向工具表明事情进展得如此糟糕,所有测试都应该终止。
    这包括运行任何其他测试脚本。

    这就解释了为什么您的套件中止。

    您可能需要考虑 die_on_failTest::Mostskip_all,具体取决于 BAIL_OUT 的原因。

    编辑:看起来 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 子例程而不设置此标志。当然,所有都未经测试; YMMV。

    【讨论】:

    • 但我确实需要 BAIL_OUT,因为我不需要运行所有其他测试。如果我使用 die 或 skip,其他测试将继续运行。我在测试失败时使用 BAIL_OUT,因为整个构建失败并且没有理由继续测试。套件中止是可以的,但我可以查看在我退出之前运行的测试的结果吗?
    • 我希望只有相关的测试套件会被中止,为什么包含所有先前测试套件的主脚本也需要消失?
    • 听起来不错,但是如何更改标志值?
    • 而且,似乎即使我将其更改为“Flase”,程序仍会退出而不打印摘要,我错了吗?
    【解决方案2】:

    您需要一次将一项测试传递给 Harness,而不是将所有测试传递给一个 TAP::Harness,以防出现 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 ($@) {
            # create new harness object if the previous fails catastrophically.
            $harness = TAP::Harness->new({ merge => 0 });
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-07-03
      • 1970-01-01
      • 1970-01-01
      • 2018-08-18
      • 2022-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-05
      相关资源
      最近更新 更多