编写涉及随机性的Perl测试时,最佳做法是什么?

Eri*_*rom 6 testing random perl srand

在对我的模块List :: Gen进行一些更新时,我决定添加一个->pick(num)方法,该方法num将从其源返回一个大小的随机元素列表.为了测试这个,我习惯srand为随机数生成器播种,并对表单进行了几次测试:

srand 1234;
is $src->pick(5)->str, '3 6 1 7 9';
Run Code Online (Sandbox Code Playgroud)

这一切都在我当时使用的Windows机器上运行良好.然而,当我将项目移动到Mac工作站时,所有随机性测试都失败了,因为尽管有相同的随机种子,rand但产生了不同的结果.我收集的是来自不同的底层C实现rand().

所以问题是,测试这些功能的最佳跨平台方法是什么?我应该rand用自己的功能重载功能吗?我应该在rand用于启用产生可预测输出的"测试"模式的函数中构建钩子吗?还有其他方法吗?

我更喜欢包含核心Perl技术的答案,因为我试图保持模块的依赖树很小.

Test :: RandomTest :: MockRandom似乎是CPAN的建议,有没有人有这些模块的经验?

小智 2

我没有使用过任何一个。

看起来 Test::Random 对您来说是更好的选择,因为您显然只是在测试中使用随机性,而不是在发布的代码中使用随机性。使用起来应该简单很多。

Test::MockRandom 模块强制 rand() 函数返回确定性序列。