Автогенерация модульных тестов .NET - PullRequest
35 голосов
/ 27 сентября 2008

Есть ли такая вещь, как генерация модульных тестов? Если так ...

... это хорошо работает?

... Какие решения для автоматической генерации доступны для .NET?

... есть примеры использования подобной технологии?

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

Ответы [ 12 ]

28 голосов
/ 27 сентября 2008

Взгляните на Pex . Это исследовательский проект Microsoft. С сайта:

Pex генерирует модульные тесты из рукописных параметризованных модульных тестов с помощью автоматического поискового тестирования на основе динамического символьного выполнения.

17 голосов
/ 27 сентября 2008

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

Вы проводите модульные тесты только для того, чтобы убедиться, что вы (как разработчик) идете по пути с точки зрения дизайна и спецификаций. Как только вы начинаете генерировать тесты автоматически, он теряет эту цель. Конечно, это будет означать 100% покрытие кода, но это покрытие будет бессмысленным и пустым.

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

При этом я считаю, что в MSTest есть инструмент автоматической генерации модульных тестов - я смог использовать его с VS2005.

15 голосов
/ 31 марта 2017

Обновлено на 2017 год:

Модульный стендовый тестовый генератор работает для VS 2015-2017 и поддерживается. Кажется, работает как рекламируется.

2 голосов
/ 13 ноября 2016

Я создал ErrorUnit, и он генерирует модульные тесты MSTest или NUnit из приостановленной Visual Studio или из ваших журналов ошибок; Переменные класса Mocking, параметры метода и доступ к данным EF пока что. (http://ErrorUnit.com)

Никакой генератор модульного теста не может делать все; Модульные тесты классически разделены на три части: Arrange, Act и Assert; часть Arrange является самой большой частью модульного теста, и она устанавливает все предварительные условия для теста, высмеивая все данные, которые будут использоваться в тесте, часть Act модульного теста обычно состоит из одной строки и активируется часть тестируемого кода, передающая эти данные, и, наконец, часть теста Assert берет результаты части Act и проверяет, соответствует ли она ожиданиям (может быть нулевыми строками, если просто убедиться, что ошибки нет).

Генераторы модульных тестов, как правило, могут выполнять только части 'Arrange' и 'Act' при создании модульных тестов; однако генераторы модульных тестов, как правило, не пишут части «Assert», поскольку только вы знаете, что правильно и что неправильно для ваших целей. Поэтому для полноты необходимо некоторое ручное введение / расширение модульных тестов.

1 голос
/ 22 мая 2009

Parasoft .TEST обладает функциональностью генерации тестов. Он использует инфраструктуру NUnit для описания тестов и оценки утверждений.

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

1 голос
/ 27 сентября 2008

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

0 голосов
/ 21 сентября 2016

GennyMcGenFace создает модульный тест для каждой функции в вашем классе и генерирует объекты со случайными словами / значениями в каждом параметре.

  • Создание модульных тестов для каждой функции в вашем классе
  • Вычисляет действительные случайно сгенерированные значения для входных параметров и оператора возврата.
  • Переменные интерфейсы возвращают действительные случайно сгенерированные значения
  • Создание модульных тестов для каждой функции в вашем классе
  • Импортирует все необходимые пространства имен в ваш тестовый класс

Это помогает при настройке ваших модульных тестов, особенно если у вас есть входные объекты с большим количеством параметров.

Модульный тест будет выглядеть примерно так image

0 голосов
/ 30 декабря 2014

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

https://visualstudiogallery.msdn.microsoft.com/45208924-e7b0-45df-8cff-165b505a38d7

Хороший разработчик

0 голосов
/ 30 сентября 2008

Selenium генерирует модульные тесты из пользовательских команд на веб-странице, довольно изящно.

0 голосов
/ 30 сентября 2008

Существует коммерческий продукт AgitarOne (www.agitar.com), который автоматически генерирует тестовые классы JUnit.
Я не использовал его, поэтому не могу комментировать, насколько он полезен, но если бы я занимался Java-проектом, я бы посмотрел на него.

Я не знаю эквивалента .net (Agitar объявил версию .net, но AFAIK так и не появился).

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