我有一个主设置脚本,它设置测试环境并将数据存储在一些变量中:
package main;
use Test::Harness;
our $foo, $xyz, $pqr;
($foo, $xyz, $pqr) = &subroutinesetup();
# ^ here
@test_files = glob "t/*";
print "Executing test @test\n";
runtests(@test_files);
在测试文件夹中,我有一个测试套件(t / testsuite1.t,testsuite2.t等)。 如何在testsuite1.t中访问$ foo的值?
package main;
use Test::More;
$actual = getActual();
is($foo, $actual, passfoor);
# ^ here
done_testing();
答案 0 :(得分:1)
使用Storable在第一个脚本中存储数据并从其他脚本中检索数据。
main.pl
($foo, $xyz, $pqr) = &subroutinesetup();
store ($foo, "/home/chankey/testsuite.$$") or die "could not store";
system("perl", "testsuite.pl", $$) == 0 or die "error";
testsuite.pl
my $parentpid = shift;
my $ref = retrieve("/home/chankey/testsuite.$parentpid") or die "couldn't retrieve";
print Dumper $ref;
您已收到$foo
中的$ref
。现在按照你想要的方式使用它。
答案 1 :(得分:1)
您不能直接共享变量,因为为每个测试文件启动了一个新的Perl进程。
如Test::Harness文档中所述,您应切换到TAP::Harness。它更灵活:例如,它提供了test_args
机制来将参数传递给测试脚本。
$ cat 1.pl
#!/usr/bin/perl
use warnings;
use strict;
use TAP::Harness;
my $harness = 'TAP::Harness'->new({
test_args => [ qw( propagate secret ) ]
});
$harness->runtests('1.t');
__END__
$ cat 1.t
#!/usr/bin/perl
use warnings;
use strict;
use Test::More;
my %args = @ARGV;
is($args{propagate}, 'secret', 'propagated');
done_testing();