是否可以让 Test::more 报告间接调用者(n 级调用者)的线路?

问题描述 投票:0回答:1

我使用 Perl 的

Test::more
编写了一些测试框架,特别是使用
ok($test_result, $test_description)
。 由于一些测试“集群”,我编写了一个执行多个
ok()
测试的子程序,主程序调用这样的子程序。

现在测试失败的问题是:

Test::More
输出子例程中的行号(直接调用者),但我希望输出“调用者的调用者”(间接调用者)行。

这可能吗?

想象代码类似于这样:

#!/usr/bin/perl
use 5.18.2;
use warnings;
use strict;
use Test::More;

sub foo(@)
{
    # do something magical
    return undef;
}

sub foo_OK(@)
{
    ok(foo(@_), 'foo_OK: ' . join(' ', @_)); # actually less trivial
}

sub complex_test(@)
{
    foo_OK(qw(something special), @_);
    foo_OK(qw(something else), @_);
    #...

}

sub main()
{
    complex_test(qw(abra kadabra));
    complex_test(qw(more magic));
    #...
}

main();
done_testing();

因此,如果

main
失败,我希望看到
test_OK
的行,而不是
ok()
的行。 如图所示,输出将是:

not ok 1 - foo_OK: something special abra kadabra
#   Failed test 'foo_OK: something special abra kadabra'
#   at /tmp/test.pl line 15.
not ok 2 - foo_OK: something else abra kadabra
#   Failed test 'foo_OK: something else abra kadabra'
#   at /tmp/test.pl line 15.
not ok 3 - foo_OK: something special more magic
#   Failed test 'foo_OK: something special more magic'
#   at /tmp/test.pl line 15.
not ok 4 - foo_OK: something else more magic
#   Failed test 'foo_OK: something else more magic'
#   at /tmp/test.pl line 15.
1..4
# Looks like you failed 4 tests of 4.
perl automated-tests line-numbers
1个回答
0
投票

Test::More 不支持此功能。我正在查看 Test::More 源代码,我发现了这个:

my($pack, $file, $line) = $self->caller;
...
$result->{fail_diag} = ("    $msg test ($file at line $line)\n");

也许我看错了部分。为了百分百确定,您可以临时修改该行(例如将

$msg
更改为
ZZZ$msg test
),然后查看是否收到修改后的消息。

© www.soinside.com 2019 - 2024. All rights reserved.