【问题标题】:Unit testing algorithms that involve random numbers涉及随机数的单元测试算法
【发布时间】:2012-10-13 21:40:54
【问题描述】:
我正在编写一些关于分形和随机地形生成的代码。具体来说,我现在使用的是 Diamond-Square 算法。不知道的小伙伴,基本都是取四个值的平均值,每一步加一个随机数。我将如何测试结果?我应该使用已知种子并手动计算平均值加上随机值,还是什么?相反,我应该使用随机数计算代码中的结果吗?还是有其他方法?此外,非常感谢您对反向过程(也称为 TDD,在代码之前编写测试)的一些想法)。
【问题讨论】:
标签:
unit-testing
testing
random
tdd
fractals
【解决方案1】:
您可以使用模拟框架来模拟随机数生成。这样您就可以消除结果中的随机性,并且能够使用一组静态的预定义测试用例来测试您的代码。
在所有情况下,您都不是在测试随机数生成,而是在进行计算。如果你有错误,你真的需要知道用于重现错误的随机数。
【解决方案2】:
只需为某个迭代选择一个种子和一个数字(也就是在实际使用其中的值之前调用该 PRNG 的次数),然后在主代码和单元测试中使用这些相同的数据(种子和迭代) .这些数据可以在一个配置文件中,主代码和单元测试都可以访问。