我需要编写自己的Test模块(TestOwn),它使用Test :: More模块。 因此,TestOwn.pm的代码类似于:
package TestOwn;
use Test::More;
1;
然后我尝试在我的一个测试文件(test01.t)中使用该包;
use lib -e 't' ? 't' : 'test';
use TestOwn;
....
done_testing();
但是当测试运行时我有错误:
t/test01.t .. Undefined subroutine &main::done_testing
所以看来Test :: More中的函数没有通过使用TestOwn 命令导入我的测试文件中。
答案 0 :(得分:2)
默认情况下,模块中的任何内容都不会导出到调用它的代码中。这是设计上的,因为导出是一项相当危险的活动,可能导致名称冲突。
您必须默认定义要导出的内容(并且您还可以为模块的用户提供对此行为的某些控制)。请参阅Exporter。
你可以导出另一个模块的方法,但这不是一个好主意。如果有人使用您的模块并Test::More
怎么办?更好的选择是围绕您认为需要的Test::More
函数创建自己的包装器,然后导出它们。但是你应该尽可能地限制出口。有更好的选择,例如使用方法的OO设计。有关此内容的更多讨论,请参阅上述文档。
调用代码还可以使用Module::function()
访问未导出的内容。