【发布时间】:2011-04-19 18:54:44
【问题描述】:
在对我的模块List::Gen 进行一些更新时,我决定添加一个->pick(num) 方法,该方法将从其源返回一个num 大小的随机元素列表。为了测试这一点,我使用srand 作为随机数生成器的种子,并进行了几个形式的测试:
srand 1234;
is $src->pick(5)->str, '3 6 1 7 9';
这一切在我当时使用的 Windows 机器上运行良好。但是,当我将项目转移到 Mac 工作站时,所有随机性测试都失败了,因为尽管具有相同的随机种子,rand 却产生了不同的结果。我认为这是来自 rand() 的不同底层 C 实现。
所以问题是,测试这些功能的最佳跨平台方法是什么?我应该用自己的重载rand 函数吗?我是否应该为使用rand 的函数构建挂钩以启用产生可预测输出的“测试”模式?还有其他方法吗?
我更喜欢包含核心 Perl 技术的答案,因为我试图保持模块的依赖树很小。
Test::Random和Test::MockRandom好像是CPAN的建议,有没有人有这些模块的经验?
【问题讨论】:
-
Test::MockRandom 允许您选择数字序列,这样您就不会受到系统差异的影响。有一次我需要随机输出并想对其进行单元测试。