我正在努力在非常严格的测试驱动开发 JUnit 氛围中训练自己。我试图找出在这样的气氛中测试随机性的最佳方法是什么。例如,我正在实现一个随机队列数组,该数组对队列和项目进行排队,并立即用数组上索引为 0-(n-1) 的项目切换该项目(从而模拟随机项目从队列中出来时它是出队)。这是我的入队方法的一些示例代码:
int randIndex = StdRandom.uniform(size); // generate random index to swap with last item
Item tmp = randArray[randIndex];
randArray[size] = item;
randArray[randIndex] = randArray[size]; //perform swap to create a random item for dequeue
randArray[size] = tmp;
size++;
我想运行一些测试以确保我的入队方法实际上是随机切换队列变量与数组中的其他索引。通常我只是在 Main() 方法中抛出一些代码,该方法迭代一堆 enqueue() 调用并打印结果,然后我会检查以确保它“感觉”是随机的。
但是,就像我说的,我想在一个非常严格的单元测试框架中做到这一点。似乎 JUnit 几乎完全使用断言语句,但我不确定我应该断言什么,除非我只是运行一些 Monte Carlo 类型的东西并检查某个 epsilon 的平均值,但这似乎有点用于测试这么简单的方法。