Как проверить на иногда неудачи? - PullRequest
1 голос
/ 29 января 2009

Я пытаюсь написать модульный тест для модуля, который даст мне случайный список чисел с учетом определенных критериев.

Конкретный тест, который я пишу, - это перестановка оригинальной последовательности. Я проверяю это

  • Последовательности одинаковой длины
  • Последовательности имеют одинаковые значения
  • Последовательности не в том же порядке

Проблема в том, что иногда последовательности имеют в одном и том же порядке. Как лучше всего с этим справиться?

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

Ответы [ 3 ]

6 голосов
/ 29 января 2009

Как вы генерируете свои случайные числа?

Я бы начал с контроля начального числа вашего генератора случайных чисел и переопределил ваш 3-й тест следующим образом: «последовательности не в том же порядке, когда мы используем другое начальное число».

5 голосов
/ 29 января 2009
  • Конкретный тест, который я пишу, - это перестановка оригинальной последовательности.
  • Последовательности не в том же порядке

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

Хотя есть вариант. Когда вы создаете генератор случайных чисел, вы можете передать в «семя». Если вы всегда проходите одно и то же семя, вы всегда должны получать один и тот же ответ. Теперь, когда вы отобрали случайное число из своей случайной функции, вы можете легко его протестировать.

2 голосов
/ 29 января 2009

Каков был бы лучший способ иметь дело с этим?

На самом деле нет способа "справиться с этим", пока не будут установлены требования. Либо это требование, чтобы тасование гарантировало, что последовательности вышли из строя (в этом случае тасование не является действительно «случайным»), либо все в порядке, что они в том же порядке. Если для shuffle допустимо возвращать что-либо в том же порядке, вы можете написать тест, который будет проверять распределение результатов по большому количеству прогонов в сравнении с ожидаемым распределением, но это примерно так же, как вы можете получить для тестирования "random " Результаты. Если для shuffle неправильно возвращать один и тот же ордер, вы можете запускать функцию несколько раз, чтобы обеспечить приемлемый уровень уверенности в том, что shuffle не вернет один и тот же ордер, поэтому применяется тот же общий принцип. Используйте большое количество прогонов и сравните результаты с принятыми допусками.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...