gpt4 book ai didi

perl - 我如何在子测试之前评估 Perl block

转载 作者:行者123 更新时间:2023-11-28 19:53:48 26 4
gpt4 key购买 nike

我想根据子测试的结果(通过/失败)为子测试描述的输出着色。这是我到目前为止所得到的

sub run_subtest {
my $desc = 'subtest description';

subtest _construct_colored_description($desc) => sub { $passed = 1; #passed is global };
}

sub _construct_colored_description {
my $desc = shift;
return colored [$passed ? 'green' : 'red'], $desc;
}

使用 use Term::ANSIColor 并且看到了彩色输出。然而,从红色/绿色的切换发生在下一个子测试中。例如,我打印了绿色测试,一个失败了,仍然打印绿色,下一个 测试打印红色。这告诉我 $passedcolored ... 正在工作,但是 subtest 中的 block 在 _construct_colored_description 之后被评估 决定输出的颜色。

对于我的实际代码,请查看我的 github 项目 https://github.com/bostonaholic/test-more-behaviour

感谢您的帮助!

最佳答案

您需要推迟对描述的评估,想到的一种解决方案是为其使用回调。这个想法是从 _construct_colored_description 返回闭包并在 subtest 函数中运行它:

my $passed = 0;

sub subtest {
my ($desc_cb, $test_cb) = @_;
$test_cb->();
print $desc_cb->(),"\n";
}

sub _construct_colored_description {
my $desc = shift;
return sub { return $passed ? '[green]' : '[red]', $desc };
}

# testing with two subtests
my $desc = 'subtest description';
subtest _construct_colored_description($desc) => sub {
$passed = 1;
};

$desc = 'subtest description2';
subtest _construct_colored_description($desc) => sub {
$passed = 0;
};

给予:

[green]subtest description
[red]subtest description2

关于perl - 我如何在子测试之前评估 Perl block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6997649/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com