首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >针对Perl测试脚本的OS专用测试

针对Perl测试脚本的OS专用测试
EN

Stack Overflow用户
提问于 2009-10-26 11:18:01
回答 3查看 307关注 0票数 1

是否有更优雅的方法来编写测试脚本中与O/S相关的部分?

请参阅注释行下面的代码。

背景:模块Perl::tag为创建一个标记文件。在Win32上,目录分隔符是"\“,而在其他操作系统上是"/”。Vim的Perl支持模块似乎非常高兴地读取标记文件,因此似乎不需要修改该模块。

代码语言:javascript
复制
#!/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');
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-10-26 11:41:17

档案::Spec路径::类正是为了解决这些特定于平台的问题而构建的。

以下是你想做的事情吗?

代码语言:javascript
复制
#!/usr/bin/perl
use strict; use warnings;

use Test::More tests => 6;
use FindBin qw($Bin);
use File::Spec::Functions qw(catfile catpath rootdir);

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 => [ catfile($Bin, 'Test.pm') ],
        refresh => 1
    );
ok ($result, 'processed successfully' ) or diag "RESULT $result";

my $file = catfile(rootdir, 'Test.pm');
# or $file = catpath('C:', rootdir(), 'Test.pm')
# depending on what you mean.

like($naive_tagger
    qr{Test\t\S+\Q$file\E\t/package Test;/}, 
    'package line',
);
票数 3
EN

Stack Overflow用户

发布于 2009-10-26 11:35:19

也许您可以一直使用Linux样式的斜杠,因为:

在编写必须在NT和UNIX下运行的Perl脚本时,必须注意许多重要问题。首先,有路径名称问题。在DOS、Windows NT和Windows 95中,可以使用反斜杠操作符指定路径名,而在UNIX中则使用正斜杠运算符。Win32 Perl端口允许正斜杠或反斜杠。在路径名中使用正斜杠的Perl脚本比使用反斜杠的脚本更可能是可移植的。此外,Perl脚本必须在字符串中使用两次反斜杠,才能从Perl解释器中转义反斜杠的一个实例。驱动器的字母不需要改变。 例如,可以使用以下任一项设置下列路径名: $myFile =“E:/user/default/datafile.txt”;$myFile = "E:\users\default\datafile.txt";

(来自Perl 5释放)

如果您确信不能始终使用Linux样式,则可以尝试使用CPAN模块档案::Spec路径::类。查看“混合Unix/Windows路径的CPAN模块”--关于Perl僧侣的讨论以获得更多信息。

票数 3
EN

Stack Overflow用户

发布于 2009-10-26 12:59:27

修订后的指导方针从锡南于纽-没有必要做操作系统特定的测试,如果

代码语言:javascript
复制
like ($naive_tagger, qr{Test\t\S\Test.pm\t/package Test;/}       , 'package line');

替换为

代码语言:javascript
复制
like ($naive_tagger, qr{Test\t\S+\QTest.pm\E\t/package Test;/}       , 'package line');

\Q (禁用)模式元字符直到\E

\E禁用模式元字符

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1624253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档