我有一个.pm模块,每个函数都有五个函数返回0或1,我想添加另一个函数来重新构造0或1(这些函数是测试函数1意味着错误0意味着失败)。构建一个perl模块
我想从脚本中调用那些建立在.pm模块上的函数。
我想让我的脚本调用.pm模块上的每个函数,如果它返回0然后继续下一个函数。如果它返回1,那么它应该向LOG打印一些东西并停止处理记录。
假设我将更新.pm模块并添加新的函数,是否可以保持脚本代码没有任何改变?每次向.pm模块添加测试时,我都不想添加if条件?
我有一个.pm模块,每个函数都有五个函数返回0或1,我想添加另一个函数来重新构造0或1(这些函数是测试函数1意味着错误0意味着失败)。构建一个perl模块
我想从脚本中调用那些建立在.pm模块上的函数。
我想让我的脚本调用.pm模块上的每个函数,如果它返回0然后继续下一个函数。如果它返回1,那么它应该向LOG打印一些东西并停止处理记录。
假设我将更新.pm模块并添加新的函数,是否可以保持脚本代码没有任何改变?每次向.pm模块添加测试时,我都不想添加if条件?
.pm模块应提供一种方法来检索要测试的函数列表。
我认为最好的方法是将其作为子程序调用,但也可以使用包中定义的变量(例如列表变量)。
例子:
package MyModule;
sub testable_functions { qw(fun1 fun2 fun3) }
sub fun1 { ... }
sub fun2 { ... }
sub fun3 { ... }
sub not_going_to_be_tested { ... }
或:
package MyModule;
our @testable_functions = qw(fun1 fun2 fun3);
在您的测试代码:
my @funs_to_be_tested = MyModule->testable_functions;
# or = @MyModule::testable_functions if you're using a list
for my $fun (@funs_to_be_tested) {
my $full_name = "MyModule::" . $fun;
$full_name->() or die "function $full_name failed\n";
}
现在你可以添加功能,而无需改变你的测试代码进行测试。
如果你想获得幻想,你可以通过包的符号表中翻找:
package MyModule;
sub testable_functions {
my @funs;
for my $name (keys %MyModule::) {
next if $name eq "testable_functions"; # can add more conditions here
my $full_name = "MyModule::".$name;
next unless *{$full_name}{CODE}; # avoid non-subs
push(@funs, $name);
}
return @funs;
}
尽管如此,合同是一样的:MyModule
提供了测试代码来获得的功能列表的方式应该进行测试。
这听起来像一个简单的测试框架/线束,你看看[Test :: Simple](http://search.cpan.org/~mschwern/Test-Simple-0.98/lib/Test/Simple.pm )而不是? 该模块似乎完全符合您的要求,但通过稍后使用它,您可以移动到Test :: More并获得其他功能。 – Panky
看到这个线程http://stackoverflow.com/questions/607282/whats-the-best-way-to-discover-all-subroutines-a-perl-module-has – bpgergo
你想获取所有子程序的名称模块? –