Rob*_*per 8 testing random automated-tests unit-testing
好的,我一直在研究随机图像选择器和队列系统(所以你不经常看到相同的图像).
一切都在游泳(就我的蹩脚代码而言),直到我得到随机位.我想测试它,但你如何测试呢?没有Debug.Assert(i.IsRandom)(遗憾地):D
所以,在用一些茶浇水之后,我把它的大脑放在上面并提出以下内容,我只是想知道我是否能想到你的想法?
即
Debug.Assert(myObj.RndVal == RndIntTester.ValuePassed);
Run Code Online (Sandbox Code Playgroud)
但我忍不住想,我是在浪费时间吗?我通过大量的迭代运行它,看看它是否随时崩溃等.
你觉得我在浪费时间吗?或者我可以逃脱:

GateKiller的回答让我想起了这个:

如果您有一组固定的项目,并且您不希望它们过于频繁地重复,则随机地对该集合进行随机播放.然后你将确保你连续两次看不到相同的图像,感觉你正在收听Top 20收音机等等.你会在重复之前完成整个收集.
Item[] foo = …
for (int idx = foo.size(); idx > 1; --idx) {
/* Pick random number from half-open interval [0, idx) */
int rnd = random(idx);
Item tmp = foo[idx - 1];
foo[idx - 1] = foo[rnd];
foo[rnd] = tmp;
}
Run Code Online (Sandbox Code Playgroud)
如果您有太多的项目要一次收集和随机播放(存储库中数以万计的图像),您可以为同一种方法添加一些分而治之.随机播放图像组,然后对每组进行随机播放.
听起来可能适用于修订后的问题陈述的略有不同的方法是让"图像选择器"实现将其最近的选择历史保留在Y最长的队列中.在返回图像之前,它会测试它是否X已经在队列中时间,如果是,它会随机选择另一个,直到它找到一个通过.
如果您真的要求测试随机数生成器的质量,我将不得不打开统计书.