gpt4 book ai didi

perl - 模拟 Perl 的 Test::More::done_testing 最惯用的方法是什么?

转载 作者:行者123 更新时间:2023-12-01 08:09:31 25 4
gpt4 key购买 nike

我必须在具有非常旧版本的 Test::More 的环境中构建单元测试(perl5.8 with $Test::More::VERSION being '0.80') 早于添加 done_testing()

出于实际原因,升级到较新的 Test::More 是不可能的。而且我正在尝试避免使用 no_tests - 当您的单元测试过早退出时不捕获通常是一个坏主意 - 说是由于某些逻辑没有在您预期的时候执行。

假设没有使用 no_testsdone_testing(),运行可配置数量的测试的最惯用的方法是什么


详细信息:

我的单元测试通常采用以下形式:

use Test::More;my @test_set = (   [ "Test #1", $param1, $param2, ... ]  ,[ "Test #1", $param1, $param2, ... ]  # ,...);foreach my $test (@test_set) {    run_test($test);}sub run_test {    # $expected_tests += count_tests($test);    ok(test1($test)) || diag("Test1 failed");    # ...}

use Test::More tests => 23;BEGIN {plan tests => 23} 的标准方法不起作用,因为两者显然都在 @tests 是已知的。


我目前的方法是将 @tests 设为全局并在 BEGIN {} block 中定义它,如下所示:

use Test::More;BEGIN {    our @test_set = (); # Same set of tests as above    my $expected_tests = 0;    foreach my $test (@tests) {        my $expected_tests += count_tests($test);    }    plan tests => $expected_tests;}our @test_set; # Must do!!! Since first "our" was in BEGIN's scope :(foreach my $test (@test_set) { run_test($test); } # Samesub run_test {}  # Same

我觉得这可以更惯用地完成,但不确定如何改进。其中最主要的是重复的 our @test_test 声明 - 在 BEGIN{} 中及其之后。


另一种方法是通过调用 Test::More->builder->plan(tests=>$total_tests_calculated) 来模拟 done_testing()。我不确定它在惯用语方面是否更好。

最佳答案

不要绕过旧版本,只需附带一份 Test::More。它没有依赖性。只需将它安装到您的发行版的 t/lib 中(您可以构建它然后复制 blib/lib),然后 使用 lib "t/lib" 在你的测试中。

关于perl - 模拟 Perl 的 Test::More::done_testing 最惯用的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2859544/

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