Генератор тестовых блоков [закрыт]

Кто-нибудь пробовал какие-либо генераторы Unit Test для .Net?

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

Спасибо.

10.12.2008 18:24:40
+1 Довольно интересный общий вопрос. Мне интересно время от времени использовать генератор тестов для крошечных проектов, и ваш вопрос имеет отношение к тому, что мне просто интересно.
Will Marcouiller 11.11.2010 15:40:36
4 ОТВЕТА
РЕШЕНИЕ

Создание модульных тестов - неправильный способ выполнения модульных тестов. Надлежащим способом выполнения модульного тестирования является создание тестовых примеров перед написанием функционального кода, а затем разработка кода до проверки тестов. Это называется TDD (Test Driven Development).

Одна из ключевых причин, по которой генерация модульных тестов - плохая идея, заключается в том, что если в существующем коде есть какие-либо ошибки, тесты будут сгенерированы для этих ошибок, поэтому, если вы исправите их в будущем, плохие тесты не пройдут, и вы '' Я предполагаю, что что-то сломано, когда это на самом деле исправлено.

Но так как код написан, теперь вода под мостом. И возможные юнит-тесты с ошибками лучше, чем вообще никаких юнит-тестов. Я всегда предпочитал NUnit и есть NUnit совместимого генератор тестов здесь (очень доступный).

22
10.12.2008 18:28:56
Да, это неправильный способ сделать TDD, но если вы работаете с устаревшим кодом, это хорошая основа, нет?
Webjedi 10.12.2008 18:30:46
@Webjedi. Я так не думаю. Написание тестов вручную поможет вам понять, что должен делать код. Запуск генератора тестов - с сомнительно читаемым кодом, который он будет производить - не поможет с этим.
tvanfosson 10.12.2008 18:38:10
Точно. Как инструмент узнает, каково поведение вашего приложения? Если у вас нет тестов, лучше написать функциональные тесты для пользовательского интерфейса с использованием WatiN или Selenium и т. Д.
bryanbcook 12.12.2008 04:39:47
+1 При использовании TDD вы правы, генератор тестов бесполезен. Тем не менее, когда вы пишете довольно простые классы в качестве хранилища данных, без методов, которые каким-то образом привязаны к шаблону Façade и Factory Design, вы можете позволить себе использовать генератор тестов. Кроме того, вы осветили мой фонарь этим ответом и должны рассмотреть другой подход. Спасибо за исчерпывающий ответ.
Will Marcouiller 11.11.2010 15:39:07

Вы рассматривали Pex ? Это из Microsoft Research.

Pex автоматически создает небольшой набор тестов с высоким охватом кода для программы .NET. С этой целью Pex выполняет систематический программный анализ (с использованием динамического символьного выполнения, подобного проверке модели с ограничением пути), чтобы определить входные данные для параметризованных модульных тестов. Pex изучает поведение программы, отслеживая следы выполнения. Pex использует решатель ограничений для создания новых входных данных теста, которые выполняют другое поведение программы.

11
10.12.2008 18:30:50
Пекс стоит посмотреть. Я нашел это полезным для растущего списка методов расширения, которые мы пишем, которые до сих пор не проверялись.
Frep D-Oronge 18.12.2009 09:57:49

Несколько лет назад я изменил QuickCheck на Haskell, чтобы обеспечить чисто функциональную разработку через тестирование с помощью генеративных тестов. Мое решение состояло в том, чтобы сохранить начальное значение PRNG для этого сгенерированного неудачного теста и запустить будущие тесты с тем же начальным числом.

Недавно я получил работу .NET, и Google обнаружил , что MbUnit действительно имеют поддержку генеративных испытаний в 2004 году я нашел более недавнее Gallio , но у меня были какие - то проблемы , используя его, я не помню точно , что.

Итак, TDD и генеративное тестирование не являются взаимоисключающими, Gallio - единственный недавний вариант .NET, который я видел, и я не помню, почему я не использую его сейчас.

5
10.12.2008 19:27:31

Я создал ErrorUnit генератор модульных тестов для .Net

Использование генератора для разработки TDD, безусловно, практично; например, при кодировании того, что происходит при нажатии кнопки, способ использования ErrorUnit в режиме TDD будет следующим:

1) Сначала создайте тест вручную, чтобы убедиться в наличии события нажатия кнопки; затем создайте событие и протестируйте согласно чистому TDD.

2) Затем запустите программу, перейдите к экрану с помощью кнопки и, установив точку останова в методе события, нажмите кнопку

3) Когда достигается точка останова, вы можете нажать «Добавить модульный тест» в ErrorUnit, чтобы сгенерировать модульный тест со всеми объектами и текущим состоянием базы данных, которые уже смоделированы. (Повторите при необходимости с различными состояниями использования)

4) Затем вы измените созданные модульные тесты, чтобы иметь Assert, чтобы соответствовать результату того, что вы хотите, чтобы нажатие кнопки выполнялось в соответствии с TDD.

5) Затем напишите код, стоящий за событием click, и запустите тест, который является частью, сгенерированной ErrorUnit (для Arrange и Act) и частью custom (для Assert).

Таким образом вы сэкономите большую часть своего времени, потраченного на ввод Arrange и Act.

ErrorUnit также работает с журналом ошибок для воспроизведения ошибок в других средах путем сериализации и проверки в модульном тесте точного состояния во время ошибки; Доведение TDD до разрешения производственных проблем.

0
31.01.2017 20:35:55