Bezdepbonusu7Программирование: статьи и ответы

Вопрос

То же случайное число, сгенерированное при запуске в тестовой настройке Fixture

Автор вопроса: samОтветов: 1

Я пытаюсь сгенерировать случайное число во время тестирования с помощью NUnit, но оно продолжает генерировать одно и то же число. Я использую следующую функцию для этой цели.

dim dCount As Integer = Math.Floor((High - Low + 1) * Rnd() + Low)
dim divName As String = "abc" & dCount

Любая идея, почему он это делает?

С уважением,

Сэм

  • Используйте 4, это гарантированно будет случайным; плюс вы сможете проверить это. garrow 26.02.2009

nunit

Ответы

Ответ 1 · рейтинг 1 · Jon Skeet

Предположительно, вы выполняете много тестов в быстрой последовательности. Я точно не знаю, что Rnd() делает в VB, но похоже, что у него типичная проблема "нового ГСЧ на вызов".

Создайте один экземпляр Random и используйте его многократно. Обратите внимание, что вашу математику можно заменить простой:

dim dCount as Integer = myRandom.Next(Low, High+1)

Одно предостережение - Random не является потокобезопасным. Если вам нужно генерировать случайные числа из разных потоков, либо используйте блокировку или статика потока.

С другой стороны: использование случайных чисел сделает ваши модульные тесты недетерминированными. Вы уверены, что должны? Иногда это уместно, но не часто IME.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы