Я пытаюсь сгенерировать случайное число во время тестирования с помощью NUnit, но оно продолжает генерировать одно и то же число. Я использую следующую функцию для этой цели.
dim dCount As Integer = Math.Floor((High - Low + 1) * Rnd() + Low)
dim divName As String = "abc" & dCount
Любая идея, почему он это делает?
С уважением,
Сэм
Ответ 1 · рейтинг 1 · Jon Skeet
Предположительно, вы выполняете много тестов в быстрой последовательности. Я точно не знаю, что Rnd() делает в VB, но похоже, что у него типичная проблема "нового ГСЧ на вызов".
Создайте один экземпляр Random и используйте его многократно. Обратите внимание, что вашу математику можно заменить простой:
dim dCount as Integer = myRandom.Next(Low, High+1)
Одно предостережение - Random не является потокобезопасным. Если вам нужно генерировать случайные числа из разных потоков, либо используйте блокировку или статика потока.
С другой стороны: использование случайных чисел сделает ваши модульные тесты недетерминированными. Вы уверены, что должны? Иногда это уместно, но не часто IME.