是否有更优雅的方式来编写与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