Автоматическое создание модульных тестов .NET

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

... хорошо ли работает?

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
44
0
39 265
11
Перейти к ответу Данный вопрос помечен как решенный

Ответы 11

Ответ принят как подходящий

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

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

ОБНОВЛЕНИЕ на 2019 год:

Как упоминалось в комментариях, Pex теперь называется IntelliTest и является функцией Visual Studio Enterprise Edition. Он поддерживает создание тестов в формате MSTest, MSTest V2, NUnit и xUnit и является расширяемым, поэтому вы можете использовать его с другими средами модульного тестирования.

Но имейте в виду следующие предостережения:

  • Поддерживает только код C#, предназначенный для .NET Framework.
  • Не поддерживает конфигурации x64.
  • Доступно в Visual Studio Только Enterprise Edition

Это было произведено как "Intellitest" как минимум для двух выпусков VS (2015, 2017). По прошествии всего этого времени он все еще работает только на x86.

StingyJack 11.08.2018 15:07

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

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

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

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

Супер старый комментарий, но никто не ответил, и я решил, что стоит сказать: я полностью согласен, но многие люди не в TDD. Нам нужен быстрый старт для тестов уже написанного кода по разным причинам. В моем случае у меня есть кодовая база, в которой нет тестов. Я хочу пройти тесты, прежде чем добавлять дополнительные функции, и просто хочу получить хорошее начало. Итак, для этого есть причины, но начинать проект с нуля, завершать его и ТОГДА вводить модульные тесты - ужасная идея, вы правы.

vbullinger 10.11.2012 00:19

@vbullinger это особенно актуально для разработчиков, которые наследуют устаревшие приложения. Да, они (просто) могут работать, но было бы удобно нарисовать линию под кодом с набором тестов, а затем двигаться вперед, внесенные исправления могут быть добавлены к уже созданным тестам.

Phil Cooper 01.07.2013 13:10

«Полностью ли Pex заменяет рукописные модульные тесты? Короткий ответ - нет». buff.ly/1oy1vyn

lifebalance 01.09.2014 18:42

Совершенно верно использовать автоматически сгенерированные модульные тесты для регрессионного тестирования перед рефакторингом или внесением потенциально критических изменений.

Chris Peacock 04.12.2019 18:22

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

На GitHub @ github.com/Jedzia/NStub есть более новое репо, которое может быть более полезным ... или нет.

CAD bloke 07.11.2013 05:07

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

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

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

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

Ссылка в ответе мертвая - "503 Служба Недоступна".

Pang 06.01.2021 05:33

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

Я не знаю эквивалента .net (Agitar анонсировал версию .net, но, AFAIK, она так и не материализовалась).

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

Selenium генерирует функциональные тесты, а не модульные тесты. Функциональное тестирование обращается к приложению так же, как и пользователь. Модульные тесты обращаются к нему под капотом.

Keith 30.09.2008 16:16

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

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

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

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

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

и в наши дни его больше не существует ... ссылки только ответы ...

Rafael Herscovici 02.02.2020 14:27

Ссылка в ответе мертвая - "404 Не Найдено".

Pang 06.01.2021 05:36

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

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

Генераторы модульных тестов обычно могут выполнять только части Договариваться и действовать при создании модульных тестов; однако генераторы модульных тестов обычно не записывают части Утверждать, поскольку только вы знаете, что правильно, а что нет для ваших целей. Таким образом, для полноты требуется некоторый ввод / расширение модульных тестов вручную.

Ах да, Pex, теперь Intellitest связь

johng 16.11.2016 00:08

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

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

Другие вопросы по теме