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





Взгляните на Pex. Это исследовательский проект Microsoft. С сайта:
Pex генерирует модульные тесты из рукописных параметризованных модульных тестов с помощью автоматизированного исследовательского тестирования, основанного на динамическом символьном выполнении.
Как упоминалось в комментариях, Pex теперь называется IntelliTest и является функцией Visual Studio Enterprise Edition. Он поддерживает создание тестов в формате MSTest, MSTest V2, NUnit и xUnit и является расширяемым, поэтому вы можете использовать его с другими средами модульного тестирования.
Но имейте в виду следующие предостережения:
Я считаю, что в генерации модульных тестов нет смысла, если говорить о TDD.
Вы делаете модульные тесты только для того, чтобы быть уверенным, что вы (как разработчик) на правильном пути с точки зрения дизайна и спецификаций. Как только вы начнете создавать тесты автоматически, он теряет эту цель. Конечно, это, вероятно, означало бы 100% покрытие кода, но это покрытие было бы бессмысленным и пустым.
Автоматические модульные тесты также означают, что ваша стратегия - это тестирование после, что противоположно принципу тестирования TDD. Опять же, TDD - это не тесты.
При этом я считаю, что у MSTest действительно есть инструмент для автоматического создания модульных тестов - я смог использовать его с VS2005.
Супер старый комментарий, но никто не ответил, и я решил, что стоит сказать: я полностью согласен, но многие люди не в TDD. Нам нужен быстрый старт для тестов уже написанного кода по разным причинам. В моем случае у меня есть кодовая база, в которой нет тестов. Я хочу пройти тесты, прежде чем добавлять дополнительные функции, и просто хочу получить хорошее начало. Итак, для этого есть причины, но начинать проект с нуля, завершать его и ТОГДА вводить модульные тесты - ужасная идея, вы правы.
@vbullinger это особенно актуально для разработчиков, которые наследуют устаревшие приложения. Да, они (просто) могут работать, но было бы удобно нарисовать линию под кодом с набором тестов, а затем двигаться вперед, внесенные исправления могут быть добавлены к уже созданным тестам.
«Полностью ли Pex заменяет рукописные модульные тесты? Короткий ответ - нет». buff.ly/1oy1vyn
Совершенно верно использовать автоматически сгенерированные модульные тесты для регрессионного тестирования перед рефакторингом или внесением потенциально критических изменений.
Я использовал NStub, чтобы заглушить тест для моих классов. Работает неплохо.
На GitHub @ github.com/Jedzia/NStub есть более новое репо, которое может быть более полезным ... или нет.
Я согласен с Джоном. Определенные типы тестирования, такие как автоматическое тестирование фаззинга, безусловно, выигрывают от автоматической генерации. Хотя для этого можно использовать возможности фреймворка модульного тестирования, это не достигает целей, связанных с хорошим покрытием модульного тестирования.
Я использовал инструменты для создания тестовых примеров. Я думаю, что он хорошо работает для высокоуровневого тестирования, ориентированного на конечного пользователя. То, что является частью пользовательского приемочного тестирования, больше, чем чистое модульное тестирование.
Я использую инструменты модульного тестирования для этого приемочного тестирования. Это работает хорошо.
См. Инструменты для создания тестовых случаев.
Ссылка в ответе мертвая - "503 Служба Недоступна".
Существует коммерческий продукт AgitarOne (www.agitar.com), который автоматически генерирует тестовые классы JUnit. Я не использовал его, поэтому не могу прокомментировать, насколько он полезен, но если бы я работал над Java-проектом в данный момент, я бы посмотрел на него.
Я не знаю эквивалента .net (Agitar анонсировал версию .net, но, AFAIK, она так и не материализовалась).
Селен генерирует модульные тесты из пользовательских команд на веб-странице, довольно изящно.
Selenium генерирует функциональные тесты, а не модульные тесты. Функциональное тестирование обращается к приложению так же, как и пользователь. Модульные тесты обращаются к нему под капотом.
Parasoft .TEST имеет возможность генерации тестов. Он использует структуру NUnit для описания тестов и оценки утверждений.
Можно подготовить набор регрессионных тестов путем автоматической генерации сценариев (создания входных данных и вызова проверенного метода) и создания утверждений, основанных на текущем поведении базы кода. Позже, после того, как тестируемая база кода эволюционирует, утверждения указывают на регресс или могут быть легко записаны снова.
Я знаю, что эта ветка устарела, но для всех разработчиков есть хорошая библиотека, называемая генератором модульных тестов:
https://visualstudiogallery.msdn.microsoft.com/45208924-e7b0-45df-8cff-165b505a38d7
Хороший разработчик
и в наши дни его больше не существует ... ссылки только ответы ...
Ссылка в ответе мертвая - "404 Не Найдено".
Я создал ErrorUnit. Он генерирует модульные тесты MSTest или NUnit из приостановленного Visual Studio или журналов ошибок; Переменные имитирующего класса, параметры метода и доступ к данным EF. См. http://ErrorUnit.com
Ни один генератор модульных тестов не может все. Модульные тесты классически делятся на три части: Договариваться, действовать и Утверждать; Часть Arrange - это самая большая часть модульного теста, и она устанавливает все предварительные условия для теста, имитируя все данные, которые будут действовать в тесте, действовать-часть модульного теста обычно представляет собой одну строку . Он активирует тестируемую часть кода, передавая эти данные. Наконец, часть теста Утверждать берет результаты части действовать и проверяет, что она соответствует ожиданиям (может быть нулевое количество строк, если просто убедиться, что нет ошибки).
Генераторы модульных тестов обычно могут выполнять только части Договариваться и действовать при создании модульных тестов; однако генераторы модульных тестов обычно не записывают части Утверждать, поскольку только вы знаете, что правильно, а что нет для ваших целей. Таким образом, для полноты требуется некоторый ввод / расширение модульных тестов вручную.
Ах да, Pex, теперь Intellitest связь
Обновлено за 2017 год:
Генератор панелей для модульных тестов работает для VS 2015-2017 и поддерживается. Кажется, работает как рекламируется.
Это было произведено как "Intellitest" как минимум для двух выпусков VS (2015, 2017). По прошествии всего этого времени он все еще работает только на x86.