如何在使用Module::Build运行时将参数传递给Perl测试



我正在使用Module::Build构建一个Perl包。包的测试t/*.t必须使用用户在调用测试时应该提供的目录中的程序:

perl Build.PL
./Build
./Build test user-supplied-directory

Module::Build文档提供了有关将参数传递给Build脚本的信息,但我还没有找到如何将它们传递给测试。有可能吗?

通常使用环境变量。这允许在不更改构建脚本的情况下更改测试的行为。

TEST_ALL_THE_THINGS=1 ./Build test

由于在Windows中无法在同一命令行中设置环境变量,我决定更改Build.PL,通过子类化Module::Build(添加操作(将环境变量传递给测试。

# Build.PL
use Module::Build;
use strict;
use warnings;
my $class = Module::Build->subclass(
class => "Module::Build::Husky",
code => <<'SUBCLASS' );
sub ACTION_test
{
my $self = shift;
my $dir = ($^O =~ /Win/) ? $ARGV[2] : $ARGV[1];
$ENV{HUSKYBINDIR} = $dir if(defined($dir) && $dir ne "" && -d $dir);
$self->SUPER::ACTION_test;
}
SUBCLASS
my $build = $class->new
(
...
);
$build->create_build_script;

现在当用户运行时

Build test user-supplied-directory

则将CCD_ 1作为CCD_。

奇怪的是,相同的命令行参数在Linux中作为$ARGV[1]传递,在Windows中作为$ARGV[2]传递。我没有机会在FreeBSD和MacOSX中测试它,但希望它能像在Linux中一样是$ARGV[1]

最新更新