这是一个使用一些全局变量/常量的简单测试用例:
use strict;
use warnings;
use base 'Test::Class';
use Test::More;
__PACKAGE__->runtests() unless caller;
my $ONE = "1";
my $TWO;
sub setup : Test(setup) {
$TWO = "2";
}
sub test_me : Tests {
is("1", $ONE);
is("2", $TWO);
}
当我运行它时,它由于$ONE
未初始化而失败:
robert@saaz:~$ prove test.t
test.t .. 1/?
# Failed test 'test me'
# at test.t line 16.
# (in main->test_me)
# got: '1'
# expected: undef
# Looks like you failed 1 test of 2.
test.t .. Dubious, test returned 1 (wstat 256, 0x100)
Failed 1/2 subtests
Test Summary Report
-------------------
test.t (Wstat: 256 Tests: 2 Failed: 1)
Failed test: 1
Non-zero exit status: 1
Files=1, Tests=2, 0 wallclock secs ( 0.02 usr 0.00 sys + 0.05 cusr 0.00 csys = 0.07 CPU)
Result: FAIL
这是为什么?显然已经定义了变量(或者由于会导致错误use strict;
),但是似乎只有安装函数中的初始化代码在运行。
如何在Test::Class
测试中使用常量?
您的分配确实会执行,但是只有在您完成测试后才能执行。这是因为您__PACKAGE__->runtests()
在分配之前运行测试(调用)。
此外,正式不允许您在执行变量之前使用变量my
。您的安排是文档唯一将其称为未定义行为的内容(这意味着可能会导致任何行为)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句