Рассмотрим метод случайного перемешивания элементов в массиве. Как бы вы написали простой, но надежный модульный тест, чтобы убедиться, что он работает?
У меня есть две идеи, каждая из которых имеет заметные недостатки:
- Перемешайте массив, затем убедитесь, что его порядок отличается от предыдущего. Это звучит хорошо, но терпит неудачу, если случайное перемешивание происходит в том же порядке. (Невероятно, но возможно.)
- Перемешайте массив с постоянным начальным числом и сравните его с заранее заданным выводом. Это зависит от случайной функции, всегда возвращающей одинаковые значения при одинаковом начальном числе. Однако иногда это неверное предположение .
Рассмотрим вторую функцию, которая имитирует броски костей и возвращает случайное число. Как бы вы протестировали эту функцию? Как бы вы проверили эту функцию ...
- никогда не возвращает число за пределами указанных границ?
- возвращает числа в правильном распределении? (Униформа для одного кубика, нормальная для большого количества кубиков.)
Я ищу ответы, дающие представление о тестировании не только этих примеров, но и случайных элементов кода в целом. Являются ли модульные тесты даже правильным решением здесь? Если нет, то какие это тесты?
Просто чтобы облегчить всем разум, я не пишу свой собственный генератор случайных чисел.