Генератор тестовых блоков
Кто-нибудь пробовал какие-либо генераторы Unit Test для.Net?
Я полагаю, что хотя он и не заменит хорошего модульного теста, написанного человеком, написавшим функциональность, но я думаю, что это отнимет часть работы и станет отправной точкой, с которой мы можем улучшить модульные тесты.
Благодарю.
5 ответов
Создание модульных тестов - неправильный способ выполнения модульных тестов. Надлежащим способом выполнения модульного тестирования является создание тестовых примеров перед написанием функционального кода, а затем разработка кода до проверки тестов. Это называется TDD (Test Driven Development).
Одна из ключевых причин, по которой генерация модульных тестов является плохой идеей, заключается в том, что если в существующем коде есть какие-либо ошибки, тесты будут сгенерированы для этих ошибок, поэтому, если вы исправите их в будущем, плохие тесты не пройдут, и вы '' Я предполагаю, что что-то сломано, когда это на самом деле исправлено.
Но так как код написан, теперь вода под мостом. И возможные юнит-тесты с ошибками лучше, чем вообще никаких юнит-тестов. Я всегда предпочитал NUnit, и здесь есть тестовый генератор, совместимый с NUnit (очень доступный).
Вы рассматривали Pex? Это от Microsoft Research.
Pex автоматически создает небольшой набор тестов с высоким охватом кода для программы.NET. С этой целью Pex выполняет систематический программный анализ (используя динамическое символьное выполнение, аналогичное проверке модели с ограничением пути), чтобы определить входные данные для параметризованных модульных тестов. Pex изучает поведение программы, отслеживая следы выполнения. Pex использует решатель ограничений для создания новых входных данных теста, которые выполняют другое поведение программы.
Несколько лет назад я изменил QuickCheck на Haskell, чтобы обеспечить чисто функциональную разработку через тестирование с помощью генеративных тестов. Мое решение состояло в том, чтобы сохранить начальное значение PRNG для этого сгенерированного неудачного теста и запустить будущие тесты с тем же начальным числом.
Недавно я получил работу.NET, и Google обнаружил, что в 2004 году у MbUnit была поддержка генеративных тестов. Я также нашел более позднюю версию Gallio, но у меня были какие-то проблемы с ее использованием, я точно не помню, что именно.
Итак, TDD и генеративное тестирование не являются взаимоисключающими, Gallio - единственный недавний вариант.NET, который я видел, и я не помню, почему я не использую его сейчас.
Вот статья со списком инструментов генерации тестов на основе кода
http://home.mit.bme.hu/~micskeiz/pages/code_based_test_generation.html
Я создал ErrorUnit генератор модульных тестов для.Net
Использование генератора для разработки TDD, безусловно, практично; например, при кодировании того, что происходит при нажатии кнопки, способ использования ErrorUnit в режиме TDD будет следующим:
1) Сначала создайте тест вручную, чтобы убедиться в наличии события нажатия кнопки; затем создайте событие и протестируйте в соответствии с чистым TDD.
2) Затем запустите программу, перейдите к экрану с помощью кнопки и, установив точку останова в методе события, нажмите кнопку
3) Когда достигается точка останова, вы можете нажать "Добавить модульный тест" в ErrorUnit, чтобы сгенерировать модульный тест со всеми объектами и текущим состоянием базы данных, которые уже смоделированы. (Повторите при необходимости с различными состояниями использования)
4) Затем вы измените созданные модульные тесты, чтобы иметь Assert, чтобы соответствовать результату того, что вы хотите, чтобы нажатие кнопки выполнялось в соответствии с TDD.
5) Затем напишите код за событием click и запустите тест, который является частью, сгенерированной ErrorUnit (для Arrange и Act) и частью custom (для Assert).
Таким образом вы сэкономите большую часть своего времени, потраченного на ввод Arrange и Act.
ErrorUnit также работает с журналом ошибок для воспроизведения ошибок в других средах путем сериализации и проверки в модульном тесте точного состояния во время ошибки; Доведение TDD до разрешения производственных проблем.