Подтвердить что ты не робот

Автоматическая генерация тестовых тестов .NET

Есть ли такая вещь, как unit test поколение? Если так...

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

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

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

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

4b9b3361

Ответ 1

Посмотрите Pex. Его проект Microsoft Research. На веб-сайте:

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

Ответ 2

Я считаю, что нет смысла в генерации Unit test, поскольку TDD идет.

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

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

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

Ответ 4

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

Генератор no Unit Test может делать все; Единичные тесты классически разделяются на три части: "Упорядочить", "Акт" и "Утверждение"; часть Arrange является самой большой частью Unit Test, и она устанавливает все предварительные условия для теста, издеваясь над всеми данными, которые будут действовать в тесте, часть Act Unit Test обычно является одной строкой и активирует часть тестируемого кода, проходящую в этих данных, и, наконец, часть Assert теста принимает результаты части Act и проверяет, что она удовлетворяет ожиданиям (может быть нулевыми линиями, только убедившись, что нет ошибки).

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

Ответ 5

Я использовал NStub, чтобы завершить тестирование для моих классов. Он работает достаточно хорошо.

Ответ 6

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

Ответ 7

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

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

Ответ 8

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

Я использую инструменты unit test для этого приемочного тестирования. Он работает хорошо.

См. Инструмент для создания тестовых случаев.

Ответ 9

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

Я не знаю эквивалента .net(Агатар сделал анонс версии .net, но AFAIK он никогда не материализовался).

Ответ 11

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

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

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

unit test будет выглядеть примерно так: AcgMwxN.png

Ответ 12

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