Ric*_*hlv 2 testing perl modulino
假设有一个简单的Perl脚本testme.pl,就像这样:
use strict;
use warnings;
sub testme {
return 1;
}
1;
Run Code Online (Sandbox Code Playgroud)
和测试文件testme.t这样:
use strict;
use warnings;
use Test::More;
require_ok('testing.pl');
ok(testme());
done_testing();
Run Code Online (Sandbox Code Playgroud)
运行perl testme.t似乎按预期工作,但http://www.perlmonks.org/bare/?node_id=537361和/sf/answers/639423711/建议添加包行,所以我修改了原始剧本:
use strict;
use warnings;
package My::Testing;
sub testme {
return 1;
}
1;
Run Code Online (Sandbox Code Playgroud)
现在测试失败了:
Undefined subroutine &main::testme called at testing.t
Run Code Online (Sandbox Code Playgroud)
为什么这样?
它失败是因为您的testmesub不再位于默认main命名空间中,它现在位于My::Testing命名空间(包)中.您现在需要以其全名访问它My::Testing::testme().
中的标识符main不需要显式指定它们的包,因为它是默认值,但这就是错误消息将其称为的原因main::testme.
(你也可以use Exporter在My::Testing包中导出sub,然后import从你的测试脚本中导出它作为将sub复制到测试脚本命名空间的一种方式.或者你可以将另一个package My::Testing命令放入测试脚本中,这样它就会在My::Testing默认情况下命名空间.但是引用它My::Testing::testme()是最简单的修复方法,最清楚地说明了你得到的错误信息背后的原因.)