是否有更優雅的方式來編寫與O/S相關的測試腳本部分?針對Perl測試腳本的操作系統特定測試
請參考註釋行下面的代碼。
背景:模塊Perl :: Tags爲VIM創建一個標籤文件。在Win32上,目錄分隔符是「\」,但在其他操作系統上是「/」。 Vim的Perl支持模塊似乎很高興地閱讀標籤文件,所以似乎沒有必要修改模塊。
#!/usr/bin/perl -w
use strict; use warnings;
use Data::Dumper;
use Test::More tests => 6;
use FindBin qw($Bin);
BEGIN {
use_ok('Perl::Tags');
}
my $naive_tagger = Perl::Tags::Naive->new(max_level=>1);
ok (defined $naive_tagger, 'created Perl::Tags');
isa_ok ($naive_tagger, 'Perl::Tags::Naive');
isa_ok ($naive_tagger, 'Perl::Tags');
my $result =
$naive_tagger->process(
files => [ "$Bin/Test.pm" ],
refresh=> 1
);
ok ($result, 'processed successfully') or diag "RESULT $result";
# Other tests also fail because \Test.pm on Win32 vs /Test.pm on Linux/ OS X
if ($^O =~ /MSWin32/) {
like ($naive_tagger, qr{Test\t\S+\\Test.pm\t/package Test;/} , 'package line');
} else {
like ($naive_tagger, qr{Test\t\S+/Test.pm\t/package Test;/} , 'package line');
}
感謝您指出Path :: Class。文件的字符串化('','Test.pm')根據需要返回\ Test.pm或/Test.pm。不幸的是,qr {}需要\\ Test.pm。我將在下面發佈臨時解決方案以供評論。 – heferav 2009-10-26 12:55:23
這正是我想要做的,除了所有的測試都是在Test.pm上進行的,因此不需要聲明** my $ file **。 – heferav 2009-10-26 15:23:23