【发布时间】:2020-04-24 13:01:12
【问题描述】:
我想知道如何单独测试 *.pl 文件中的每个子路由。 但不能使用 'require' 子句,因为某些 *.pl 需要参数。
例如
use Test::More;
require "some.pl"
在“要求”处测试总是会失败。
因为“some.pl”需要一个参数并以
exit(0);
文件。
我只想单独测试“*.pl”中的每个子路由“Func1,usage,...whatever”。
some.pl 就是这样的
my ( $cmd) = @ARGV;
if (!defined $cmd ) {
usage();
} else {
&Func1;
}
exit(0);
sub Func1 {
print "hello";
}
sub usage {
print "Usage:\n",
}
如何通过“Test::More”为“sub Func1”编写测试代码?
任何建议表示赞赏。
【问题讨论】:
-
您要测试
Func1的目的是什么?它不返回任何值。你想做什么? Test::Simple - tutorial -
感谢评论,极地。我的道歉解释不佳。更新我的问题。仍然需要你的帮助。谢谢
-
不过,您在问题中的评论并不清楚。通常会编写测试来验证模块功能是否正确产生结果。由于某个函数的规则返回值与预期值进行比较——如果返回值匹配 es 则它通过了测试。在您的情况下,两个函数都在终端中打印一些字符串并且没有返回值。或者你只是想看看它们是否完成了它们的功能——在一种情况下打印“hello”,在另一种情况下打印“Usage”?
-
感谢 Polar,您说得对。现在新问题层出不穷。我必须努力解决你在下一阶段指出的这个问题。
-
如果您有一个包含要在外部使用的子例程的
.pl文件,听起来您有一个 Perl 4 风格的“perl 库”。您应该通过将其设置为 module 来将其更新到现代。然后,您可以通过完整的包名加载模块并运行其子例程,或者将模块中的子例程导入您的命名空间。最后,您可以创建一个也使用相同模块的脚本,并执行特定于脚本的逻辑,如 exit()。