Один из способов, который я использую для модульного тестирования недетерминированных функций алгоритмов GA, - это выбор случайных чисел в другой функции логической функции, которая использует эти случайные числа.
Например, если у вас есть функция, которая берет ген (вектор чего-либо) и берет две случайные точки гена, чтобы что-то с ними сделать (мутация или что-то еще), вы можете поместить генерацию случайных чисел в функции, а затем передать их вместе с геном в другую функцию, которая содержит логику с учетом этих чисел.
Таким образом, вы можете выполнить TDD с помощью логической функции и передать ей определенные гены и определенные числа, точно зная, что должна делать логика для гена, учитывая эти числа, и имея возможность записывать утверждения на модифицированном гене.
Другим способом тестирования с генерацией случайных чисел является экстернализация этого поколения в другой класс, к которому можно получить доступ через контекст или загрузить из значения конфигурации, и использование другого для выполнения теста. Было бы две реализации этого класса, одна для производства, которая генерирует реальные случайные числа, и другая для тестирования, у которых были бы способы принять числа, которые позже будут сгенерированы. Затем в тесте вы можете указать определенные числа, которые класс предоставит в проверенный код.