Как повторно запустить тот же тест с теми же данными в MbUnit - PullRequest
3 голосов
/ 18 сентября 2010

Скажем, у меня есть следующий тест:

    [Test]
    public void MyTest( [RandomNumbers( Count=100, Minimum=0, Maximum=1000 )] int number )
    {
        ...
    }

И в какой-то момент, во время моего обычного процесса сборки, он не прошел.Я получил уведомление по электронной почте и отправился на расследование.

Теперь, когда я открываю тест в Visual Studio и нажимаю «Выполнить тесты», он проходит.Я делаю это снова, и это снова проходит.И опять.И опять.Очевидно, что ошибка была связана с этой конкретной последовательностью случайных чисел.

Итак, вопрос: Как мне повторно запустить этот тест с этой точной последовательностью?
(при условии, что яиметь полный отчет Gallio)



ОБНОВЛЕНИЕ :
(после комментария о том, что это плохая идея)

Первый , я на самом деле не спрашиваю, хорошая ли это идея.Вопрос в другом.

Секунда , когда тестируемая система достаточно сложна, а пространство входных данных имеет несколько независимых измерений, поэтому правильное разбиение этого пространства на области эквивалентности представляет значительную проблему.и в умственных усилиях, и во времени, что просто не стоит, при условии, что меньшие компоненты системы уже были испытаны самостоятельно.В то же время, если я могу просто подсунуть систему туда-сюда, почему бы не сделать это?

Третий , я на самом деле не новичок в этой области.Я всегда использовал эту технику с другими тестовыми средами (такими как csUnit и NUnit), и она оказалась очень успешной в обнаружении незначительных ошибок.В то время не было таких понятий, как генерируемые данные, поэтому мы использовали наши собственные костыли в форме System.Random с заранее определенным начальным числом.Это семя было сгенерировано как часть инициализации прибора (обычно на основе текущего времени) и тщательно записано в журнал.Таким образом, когда тест не удался, я мог взять начальное значение из журнала, подключить его к тестовому устройству и получить точно такой же набор тестовых данных и, таким образом, точно такой же отказ отладки.

И четвертый , если это такая плохая идея, почему фабрика RandomNumbers вообще существует?

1 Ответ

1 голос
/ 18 сентября 2010

В Gallio / MbUnit в настоящее время нет встроенного способа генерировать ту же последовательность случайных чисел.Но я думаю, что это может быть полезной функцией, и я открыл для этого запроса вопрос . Я собираюсь обновить тему ответа, когда он будет готов.

Я предлагаю следующее:

  • Отображение фактического начального числа внутреннего генератора случайных чиселв виде аннотации в протоколе испытаний.
  • Предоставьте свойство Seed атрибутам [RandomNumbers] и [RandomStrings], а также генераторам беглых данных.

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

ОБНОВЛЕНИЕ : эта функция теперь доступна в Gallio v3.3.8 и позже.


Теперь мы все согласны с тем, что сказал Петр.Использование случайных чисел в качестве входных данных для модульных тестов редко хорошая идея.Следствием этого является то, что это иногда удобно и в основном уместно.Именно по этой причине мы решили реализовать эту функцию в MbUnit.ИМХО, общий сценарий, который мог бы хорошо соответствовать случайным входным данным, - это стохастический анализ вычислений хеш-кода .

...