Создавайте модульные тесты для фазз-тестирования с помощью IntelliTest

IntelliTest изучает код .NET для создания тестовых данных и набора модульных тестов. Для каждого оператора в коде создается тестовый ввод, чтобы выполнить этот оператор. Анализ случаев выполняется для каждой условной ветви в коде. Например, if анализируются операторы, утверждения и все операции, которые могут вызывать исключения. Этот анализ используется для создания тестовых данных для параметризованного модульного теста для каждого из методов, создавая модульные тесты с высоким уровнем покрытия кода. Подумайте об этом как интеллектуальное нечеткое тестирование, которое обрезает входные и тестовые варианты до того, что выполняет все ветви логики и проверяет наличие исключений.

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

Замечание

IntelliTest устарел в Visual Studio 2026. В Visual Studio 2022 IntelliTest поддерживается только для .NET Framework, и ограничивается версией Visual Studio Enterprise. Поддержка .NET 6 была ограничена только предварительной версией.

Замечание

В Visual Studio 2022 IntelliTest поддерживается только для .NET Framework, и ограничивается версией Visual Studio Enterprise. Поддержка .NET 6 была ограничена только предварительной версией.

Доступность и расширения

Команды меню Create IntelliTest и Run IntelliTest :

  • Доступны только в Выпуске Enterprise в Visual Studio.

  • Поддерживает только код C#, предназначенный для .NET Framework.

  • Являются расширяемыми и поддерживают тесты в форматах MSTest, MSTest V2, NUnit и xUnit.

  • Не поддерживает конфигурацию x64 (требуется предварительная версия).

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

Чтобы создать модульные тесты, типы должны быть общедоступными.

  1. Откройте решение в Visual Studio, а затем откройте файл класса с методами, которые необходимо проверить.

  2. Щелкните правой кнопкой мыши метод и выберите "Запустить IntelliTest ", чтобы создать модульные тесты для кода в методе.

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

    IntelliTest выполняет код много раз с различными входными данными. Каждый запуск представлен в таблице с входными данными теста и результирующий результат или исключение.

    Снимок экрана: окно

Чтобы создать модульные тесты для всех общедоступных методов в классе, просто щелкните правой кнопкой мыши в классе, а не определенный метод, а затем нажмите кнопку "Запустить IntelliTest". Используйте раскрывающийся список в окне результатов исследования , чтобы отобразить модульные тесты и входные данные для каждого метода в классе.

Снимок экрана результатов теста для просмотра в списке.

Для успешных тестов убедитесь, что результаты, указанные в столбце результатов, соответствуют вашим ожиданиям для кода. Для тестов, которые завершаются сбоем, исправьте код соответствующим образом. Затем повторно запустите IntelliTest, чтобы проверить исправления.

Сохранение: сохранение модульных тестов в виде набора регрессий

  1. Выберите строки данных, которые необходимо сохранить с параметризованным модульным тестом в тестовом проекте.

    Снимок экрана: сохранение результатов теста.

    Вы можете просмотреть тестовый проект и параметризованный модульный тест, который был создан — отдельные модульные тесты, соответствующие каждой из строк, сохраняются в файле .g.cs в тестовом проекте, а параметризованный модульный тест сохраняется в соответствующем файле .cs. Модульные тесты можно запускать и просматривать результаты из обозревателя тестов так же, как и для всех модульных тестов, созданных вручную.

    Снимок экрана: сохраненные тесты в обозревателе решений.

    Все необходимые ссылки также добавляются в тестовый проект.

    Если код метода изменяется, повторно запустите IntelliTest, чтобы сохранить модульные тесты синхронизированы с изменениями.

Помощник: Используйте IntelliTest для изучения кода

  1. Если у вас более сложный код, IntelliTest помогает вам сосредоточиться на изучении кода. Например, если у вас есть метод, имеющий интерфейс в качестве параметра, и существует несколько классов, реализующих этот интерфейс, IntelliTest обнаруживает эти классы и сообщает предупреждение.

    Просмотрите предупреждения, чтобы решить, что нужно сделать.

    Снимок экрана предупреждений в режиме просмотра.

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

    Снимок экрана: предупреждение об исправлении.

    Этот выбор добавляется в файл PexAssemblyInfo.cs .

    [assembly: PexUseType(typeof(Camera))]

  3. Теперь можно повторно запустить IntelliTest, чтобы создать параметризованный модульный тест и тестировать данные только с помощью фиксированного класса.

    Снимок экрана повторного запуска IntelliTest после исправления.

Укажите: используйте IntelliTest для проверки свойств правильности, указанных в коде.

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

Вопросы и ответы

Вопрос. Можно ли использовать IntelliTest для неуправляемого кода?

A: Нет, IntelliTest работает только с управляемым кодом.

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

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

Если у вас есть тест, который может пройти, если возникают определенные исключения, можно задать один из следующих атрибутов на основе ваших требований на уровне тестов, класса тестирования или сборки:

  • PexAllowedExceptionAttribute

  • PexAllowedExceptionFromTypeAttribute

  • PexAllowedExceptionFromTypeUnderTestAttribute

  • PexAllowedExceptionFromAssemblyAttribute

Вопрос. Можно ли добавить предположения в параметризованный модульный тест?

A: Да, используйте предположения, чтобы указать, какие тестовые данные не требуются для модульного теста для определенного метода. PexAssume Используйте класс для добавления допущений. Например, можно добавить предположение, что lengths переменная не имеет значения NULL, как показано ниже.

PexAssume.IsNotNull(lengths);

При добавлении допущения и повторном запуске IntelliTest будут удалены тестовые данные, которые больше не актуальны.

Вопрос. Можно ли добавить утверждения в параметризованный модульный тест?

A: Да, IntelliTest проверяет правильность утверждения в инструкции при выполнении модульных тестов. PexAssert Используйте класс или API утверждения, который поставляется с платформой тестирования, чтобы добавить утверждения. Например, можно добавить утверждение о том, что две переменные равны.

PexAssert.AreEqual(a, b);

Если вы добавите утверждение и повторно запустите IntelliTest, он проверит, является ли ваше утверждение допустимым, и тест завершится ошибкой, если нет.

Вопрос. Можно ли сначала создавать параметризованные модульные тесты без запуска IntelliTest?

A: Да, щелкните правой кнопкой мыши класс или метод, а затем выберите "Создать IntelliTest".

Снимок экрана: Создание IntelliTest.

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

Снимок экрана: создание IntelliTest с помощью MSTest по умолчанию.

Вопрос. Можно ли использовать другие платформы модульных тестов с IntelliTest?

A: Да, выполните следующие действия, чтобы найти и установить другие платформы. Расширения платформы тестирования также доступны в Visual Studio Marketplace, например генератор тестов NUnit.

После перезапуска Visual Studio и повторного открытия решения щелкните правой кнопкой мыши класс или метод, а затем нажмите кнопку "Создать IntelliTest". Выберите установленную платформу:

Снимок экрана: Выбор другой платформы модульных тестов для IntelliTest.

Затем запустите IntelliTest, чтобы создать отдельные модульные тесты в соответствующих .g.cs файлах.

Вопрос. Можно ли узнать больше о том, как создаются тесты?

A: Да, чтобы получить общий обзор, ознакомьтесь с этой записью блога.