编写使用Test :: More的自己的Test Perl模块

时间:2015-04-29 09:16:26

标签: perl

我需要编写自己的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 命令导入我的测试文件中。

1 个答案:

答案 0 :(得分:2)

默认情况下,模块中的任何内容都不会导出到调用它的代码中。这是设计上的,因为导出是一项相当危险的活动,可能导致名称冲突。

您必须默认定义要导出的内容(并且您还可以为模块的用户提供对此行为的某些控制)。请参阅Exporter

可以导出另一个模块的方法,但这不是一个好主意。如果有人使用您的模块并Test::More怎么办?更好的选择是围绕您认为需要的Test::More函数创建自己的包装器,然后导出它们。但是你应该尽可能地限制出口。有更好的选择,例如使用方法的OO设计。有关此内容的更多讨论,请参阅上述文档。

调用代码还可以使用Module::function()访问未导出的内容。