在对我的模块List::Gen进行一些更新时,我决定添加一个->pick(num)
方法,该方法将从其源返回一个num
大小合适的随机元素列表。为了测试这一点,我使用srand
了随机数生成器的种子,并进行了几个形式的测试:
srand 1234;
is $src->pick(5)->str, '3 6 1 7 9';
这一切在我当时使用的 Windows 机器上运行良好。但是,当我将项目转移到 Mac 工作站时,所有随机性测试都失败了,因为尽管具有相同的随机种子,rand
但产生了不同的结果。我收集到这是来自不同的底层 C 实现rand()
。
那么问题来了,测试这些功能的最佳跨平台方式是什么?我应该用我自己的重载rand
函数吗?rand
我应该为用于启用产生可预测输出的“测试”模式的函数构建挂钩吗?还有其他方法吗?
我更喜欢包含核心 Perl 技术的答案,因为我试图保持模块的依赖关系树很小。
Test::Random和Test::MockRandom似乎是 CPAN 的建议,有人对这些模块有经验吗?