到目前为止,我在互联网上找到的唯一帮助是这个博客。我认为这会让我到达那里,但我认为它实际上并没有改变我模块中的值。我做了一个样本来说明我的意思。
package Module;
use 5.012;
use strict;
use warnings;
use Readonly qw( );
use parent qw(Exporter);
our @EXPORT_OK = qw(
&GetReadonly
);
our %EXPORT_TAGS = (
all => [ @EXPORT_OK ] );
Readonly::Scalar my $HOST => 'host.web.server.com';
sub GetReadonly
{
return $HOST;
}
1;
和测试代码:
#!perl
use strict;
use warnings;
use Test::More 'no_plan';
use Module qw/ :all /;
is($Module::HOST, 'host.web.server.com'); # HOST == undef
my $fake_host = 'fakemail.web.server.com';
{
no warnings 'redefine';
local *Readonly::Scalar::STORE = sub { ${$_[0]} = $_[1]; };
$Module::HOST = $fake_host;
}
is(GetReadonly(), $fake_host); # Returns host.web.server.com
如果我使用Module::HOST
博客中的,我会得到一个裸字编译错误。
有没有更好的方法来模拟 Readonly 以进行单元测试?