我写了一个小的Perl脚本,现在我想为它创建一个测试套件。我认为能将use
脚本作为一个模块,导入脚本中定义的潜艇并对其进行测试会很好。有没有办法让脚本既是独立的Perl脚本又是Perl模块? (我不想剧本拆分成独立的模块和“可执行”,因为我打算分发脚本为单个文件。)如何测试独立的Perl脚本?
还是有更好的方法来测试脚本?
我写了一个小的Perl脚本,现在我想为它创建一个测试套件。我认为能将use
脚本作为一个模块,导入脚本中定义的潜艇并对其进行测试会很好。有没有办法让脚本既是独立的Perl脚本又是Perl模块? (我不想剧本拆分成独立的模块和“可执行”,因为我打算分发脚本为单个文件。)如何测试独立的Perl脚本?
还是有更好的方法来测试脚本?
由于布赖恩似乎是睡着了,现在,这里是一个指针,他所谓modulinos。这基本上是构建可以像脚本一样运行的模块或模块的脚本的配方。听起来完全像你正在寻找的东西。
Mastering Perl绝对是一本值得一读的(和购买)。
为什么不写一个测试套件在一个shell脚本,与被称为像任何其他shell命令的Perl脚本?
是的,这当然是一个选项,但直接使用subs对我来说似乎更方便。 – zoul 2009-01-22 11:29:17
(我不想剧本拆分成独立的模块和“可执行”,因为我打算分发脚本为单个文件。)
大多数人缝合在一起文件如这在构建时。 CPAN上的App :: Ack是一个可以像这样构建的东西的例子。
如果你真的想测试你的应用程序正确,你需要把功能模块中,然后写一个测试::基于更多测试脚本,行使该模块提供的功能。然后实际的脚本只是一个瘦包装模块周围,通常是这样的:
#!/usr/bin/env perl
use Your::Class;
Your::Class->new(args => \@ARGV)->run;
参见:MooseX::Getopt。
这取决于你是否想测试脚本本身,或测试弥补了剧本的潜艇。如果你想测试脚本,那么外部测试会更合适,例如,一个shell脚本。如果要测试组成该脚本的函数,则可以将这些测试作为更多函数写入脚本中,或者将这些元素重构为Perl模块并测试模块(您称之为不想执行的模块) 。
如果脚本足够小,则重构可能不是必需的。只需添加一个'-test'命令行参数并调用一个测试子,然后再测试其他一切。如果这样做,我喜欢打印某种进度指示器(例如,每次通过测试的'。')。
但是,如果脚本比较复杂,您可能需要考虑将位重构为一个或多个模块,并使用Test::Simple或Test::More进行测试。
我想要做同样的事情。有没有理由不这样做? (我不是perl的专家,虽然这个解决方案似乎对我很好。):
在脚本的开始处我要求一个开关(“-test”)或任何东西,然后转到子是这样的:
my $myargs = CmdLineOptions->new(args=>\@ARGV);
if ($myargs->was_given(option=>"-test")) { &tests; }
sub tests {
require "Test/More.pm";
Test::More->import('no_plan');
is(1,1,"my tests go here");
exit;
}
(使用要求和进口我消息打压使用时,我得到“使用测试::更多”没有做任何测试“#没有运行测试!”。我想这也减少了开销。)
谢谢,这正是我一直在寻找的。 – zoul 2009-01-22 12:46:20