Если вы не пишете генератор случайных чисел или какую-то библиотеку шифрования, которая полагается на защищенные генераторы случайных чисел, вам не нужно проверять, является ли генератор случайных чисел предвзятым или нет. Это задание автора генератора случайных чисел.
Ваш пример Collections.shuffle()
также является плохим примером, потому что это встроенный метод JDK. Нет причин проверять встроенный метод JDK, авторы Java сделали это уже для вас, а также миллионы пользователей, которые использовали эти методы за последние 20 лет. У вас также есть тесты, чтобы подтвердить, что System.out.print()
работает так же, как ожидалось?
Единичные испытания должны быть детерминированными. Повторное повторение одного и того же теста снова и снова должно давать одинаковые результаты КАЖДЫЙ раз. Если они этого не делают, и тест терпит неудачу, то он терпит неудачу, потому что код неисправен или потому что недетерминированный результат приводит к недопустимому вводу? Если при повторном тестировании результаты проходят, это потому, что ошибка была исправлена или из-за того, что нам удалось получить случайный ввод, который сработал?
По этим причинам, ваши юнит-тесты должны пытаться издеваться или удалять любую случайность. Возможно, напишите несколько тестов, которые выполняют конкретные преобразования данных для проверки граничных условий. Например, для shuffle()
может быть проведен тест, который переупорядочивает элементы в определенном порядке или сортирует элементы в порядке возрастания или убывания или тест, который фактически не делает никаких преобразований и т. Д. Это все допустимые результаты, которые могут произойти случайным образом.
Таким образом, все тесты производят одинаковый выход для одного входа каждый раз, и вы получаете выгоду от разных результатов.
EDIT Кажется, вы действительно хотите протестировать свой собственный генератор случайных чисел.
Ниже приведены ссылки, которые описывают статистические тесты, которые нужно сделать, чтобы увидеть, если это действительно случайно (или, по крайней мере, как случайное, насколько это возможно)
RANDOM.ORG statistical analysis
NIST statistical test suite
http://stackoverflow.com/questions/56411/how-to-test-randomness-case-in-point-shuffling –
stackoverflow.com/questions/56411/... о перетасовке. Это часть этого вопроса. –
@AlexandreSantos Почему нет приемлемого ответа на этот вопрос? – awksp