我有一个使用随机数的模块。出于测试目的,我想设置随机数生成器以在调用之前提供给定的数字。我正在测试的代码包含如下依赖:
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,这应该总是失败)。这与我如何做qw(rand)有关吗?我错误地使用MockModule了吗?我应该使用MockModule吗?在我找到MockModule之前我尝试了MockObject,但那也没有用。
答案 0 :(得分:2)
所以,我认为发生的是......
如果你在调用模拟“rand”后移动“use_ok”,它可能会有效。或者,可以使LogiDice不将“rand”导入其自己的命名空间,并始终引用MT :: rand。