如何在Perl的Test :: More中声明后使用参数`tests`?

Ole*_*aev 3 testing perl

perldoc -f use
函数的语法use:

   use Module VERSION LIST
   use Module VERSION
   use Module LIST
   use Module
   use VERSION
Run Code Online (Sandbox Code Playgroud)

但在这种情况下:

use Test::More tests => 5;
Run Code Online (Sandbox Code Playgroud)

(它将测试次数设置为5)

表达的数据类型是tests => 5什么?
是LIST还是其他什么?

tests声明后如何使用此参数?

zig*_*don 8

是的,这是上面LIST提到的 - 这=>只是写这个的一种奇特的方式:

use Test::More ("tests", 5);
Run Code Online (Sandbox Code Playgroud)

Test::More->import("tests", 5)在加载模块后依次调用.

  • 我不认为你可以直接,但为什么不只是'使用Test :: More',然后再调用'plan()'?那样你可以在脚本中的变量中存储测试数量吗? (4认同)
  • @oraz:您可以使用`$ tests = Test :: Builder-> new-> has_plan`获得您计划的测试数量 - 请参阅[Test :: Builder]的文档(http://search.cpan.组织/的perldoc?测试::生成器).但是如果你想得到这个值,你就知道要跳过多少,你应该真正地调用`skip_all`. (3认同)

bri*_*foy 6

您可以要求Test :: More为您提供构建器对象:

use Test::More tests => 5;

my $plan = Test::More->builder->has_plan;

print "I'm going to run $plan tests\n";
Run Code Online (Sandbox Code Playgroud)

您不必将测试数量设为文字.您可以计算它并将其存储在变量中:

use vars qw($tests);

BEGIN { $tests = ... some calculation ... }
use Test::More tests => $tests;

print "I'm going to run $tests tests\n";
Run Code Online (Sandbox Code Playgroud)

您不必提前宣布计划:

use Test::More;

my $tests = 5;
plan( tests => $tests );

print "I'm going to run $tests tests\n";
Run Code Online (Sandbox Code Playgroud)

你问过跳过测试.如果要跳过所有测试,可以使用skip_all而不是tests:

use Test::More;

$condition = 1;

plan( $condition ? ( skip_all => "Some message" ) : ( tests => 4 ) );

pass() for 1 .. 5;
Run Code Online (Sandbox Code Playgroud)

如果要将测试分组,也可以执行此操作.您计算出每个组中的测试数量,并总结这些测试以创建计划.后来你知道要跳过多少:

use Test::More;

my( $passes, $fails ) = ( 3, 5 );
my( $skip_passes, $skip_fails ) = ( 0, 1 );

plan( tests => $passes + $fails );

SKIP: {
    skip "Skipping passes", $passes if $skip_passes;
    pass() for 1 .. $passes;
    }

SKIP: {
    skip "Skipping fails", $fails if $skip_fails;
    fail() for 1 .. $fails;
    }
Run Code Online (Sandbox Code Playgroud)