Perl 模拟模块';有人不叫他吗?
我有一个使用随机数的模块。出于测试目的,我想将随机数生成器设置为在调用之前提供给定的数字。我的测试代码包含如下依赖项:Perl 模拟模块';有人不叫他吗?,perl,Perl,我有一个使用随机数的模块。出于测试目的,我想将随机数生成器设置为在调用之前提供给定的数字。我的测试代码包含如下依赖项: use Math::Random::MT qw(rand); 并这样使用它: my $currdice = int(rand($right) + 1); 我的嘲笑是这样做的: my $mockRand; BEGIN { $mockRand = Test::MockModule->new('Math::Random::MT'); use_ok(LogiD
use Math::Random::MT qw(rand);
并这样使用它:
my $currdice = int(rand($right) + 1);
我的嘲笑是这样做的:
my $mockRand;
BEGIN {
$mockRand = Test::MockModule->new('Math::Random::MT');
use_ok(LogiDice);
}
$mockRand->mock('rand' => sub {return 1});
($successes, $output) = LogiDice::roll("3d10","ww");
ok($successes == 0, "WhiteWolf mode can return 0 successes") or diag ("Reported " . $successes . " successes instead.");
我得到的是随机数的成功,而不是总是0(因为随机数应该总是1,这应该总是失败)。这和我是怎么做的有关吗?我是否错误地使用了MockModule?我应该使用MockModule吗?在找到MockModule之前,我尝试了MockObject,但这也不起作用 所以,我认为发生的是
如果您在调用mock“rand”后移动“use__ok”,则可能会起作用。或者,可以让LogiDice不将“rand”导入自己的名称空间,并始终引用MT::rand。查看调用
rand
的代码会有所帮助。大概在LogiDice
?@Borodin中,前两个引号来自LogiDice