Мой ответ уже был испорчен, мне нужно было вернуть число от 0 до 10, но мой исходный пост только вернул диапазон от 0 до 9! Вот как я узнал об этом ...
Loop 100k раз и убедитесь, что диапазон верен, он должен быть 0-10 (хотя я установил 10 в качестве переменной, используемый).
Также я храню наивысшие и самые низкие значения, которые были найдены во время цикла, и они должны быть на крайних концах шкалы.
Если самые высокие и самые низкие значения совпадают, то это индикатор того, что кто-то подделал возврат случайного числа.
Единственная проблема, которую я вижу в том, что это возможно, чтобы иметь ложный отрицательный результат от этого теста, но это маловероятно.
@Test
public void checkPinsKnockedDownIsWithinRange() {
int pins;
int lowestPin = 10000;
int highestPin = -10000;
for (int i = 0; i < 100000; i++) {
pins = tester.roll();
if (pins > tester.NUMBER_OF_PINS) {
fail("More than 10 pins were knocked down");
}
if (pins < 0) {
fail("Incorrect value of pins");
}
if (highestPin < pins) {
highestPin = pins;
}
if (lowestPin > pins) {
lowestPin = pins;
}
}
if (lowestPin == highestPin) {
fail("The highest pin count is the same as the lowest pin count. Check the method is returning a random number, and re-run the test.");
}
if (lowestPin != 0) {
fail("The lowest pin is " + lowestPin + " and it should be zero.");
}
if (highestPin != tester.NUMBER_OF_PINS) {
fail("The highest pin is " + highestPin + " and it should be " + tester.NUMBER_OF_PINS + ".");
}
}
Запустите его много раз (миллионов), подсчитайте количество вхождений каждого номера и решите, достаточно ли он для вас случайным образом. См. Например: http://en.wikipedia.org/wiki/Statistical_randomness – assylias
Возможно, вам нужно что-то, что подходит к равномерному распределению. Это не то, что вы можете легко «протестировать» с помощью модульных тестов, вместо того, чтобы было бы легче (и, возможно, более полезно) доказать, что ваш RNG создает единый дистрибутив для диапазона, который вы хотите. – Cubic
Я бы не стал , Это модульное тестирование сошло с ума. Форма кода гарантирует результат. Вам не нужно тестировать библиотечные API или умножать на десять. – EJP