我寫了一個小的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