Поделиться через


Написание модульных тестов для C/C++ в Visual Studio

Модульные тесты C++ можно записывать и запускать с помощью окна обозревателя тестов. Он работает так же, как и для других языков. Дополнительные сведения об использовании обозревателя тестовсм. в разделе Запуск модульных тестов с обозревателем тестов.

Заметка

Некоторые функции, такие как Live Unit Testing, закодированные тесты пользовательского интерфейса и IntelliTest, не поддерживаются для C++.

Visual Studio включает в себя эти платформы тестирования C++ без дополнительных загрузок:

  • Microsoft Unit Testing Framework для C++
  • Тест Google
  • Boost.Test
  • CTest

Вы можете использовать установленные платформы или написать собственный адаптер тестирования для любой платформы, которую вы хотите использовать в Visual Studio. Адаптер тестирования интегрирует модульные тесты с окном обозревателя тестов . В Visual Studio Marketplaceдоступны несколько адаптеров, отличных от Майкрософт. Дополнительные сведения см. в разделе Установка платформ модульных тестов.

  • Visual Studio 2017 и более поздних версий (профессиональный и корпоративный)

    Проекты модульных тестов C++ поддерживают CodeLens.

  • Visual Studio 2017 и более поздние версии (все издания)

    • Адаптер Google Test Adapter включен в качестве компонента по умолчанию в рабочей нагрузке «Разработка настольных приложений с C++». Он содержит шаблон проекта, который можно добавить в решение. Щелкните правой кнопкой мыши по узлу решения в обозревателе решений и выберите Добавить>Новый Проект в контекстном меню, чтобы добавить шаблон проекта. Он также имеет параметры, которые можно настроить с помощью средств >Параметры. Дополнительные сведения см. в разделе Практическое руководство. Использование Google Test в Visual Studio.

    • Boost.Test включен в качестве компонента по умолчанию для разработки desktop с помощью рабочей нагрузки C++. Он интегрирован с обозревателем тестов , но в настоящее время не имеет шаблона проекта. Его необходимо настроить вручную. Дополнительные сведения см. в разделе Практическое руководство. Использование Boost.Test в Visual Studio.

    • поддержка CTest включена в компонент средств CMake C++, который входит в состав рабочей нагрузки разработки десктопных приложений на C++. Дополнительные сведения см. в разделе Практическое руководство. Использование CTest в Visual Studio.

  • Более ранние версии Visual Studio

    Вы можете скачать расширения адаптера Google Test и Boost.Test Adapter в Visual Studio Marketplace. Найдите их в адаптере тестирования для Boost.Test и в адаптере тестирования для Google Test.

Совет

Вы также можете использовать команду с косой чертой Copilot /tests для создания модульных тестов из кода. Например, можно ввести /tests using Boost framework для создания тестов Boost.Test. Дополнительные сведения см. в разделе Использование слэш-команд в Copilot Chat.

Базовый рабочий процесс тестирования

В следующих разделах описаны основные шаги, чтобы начать модульное тестирование C++. Базовая конфигурация аналогична платформам Microsoft и Google Test. Boost.Test требует, чтобы вы вручную создали тестовый проект.

Создание тестового проекта в Visual Studio 2022

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

Чтобы добавить новый тестовый проект в существующее решение, выполните следующие действия.

  1. Щелкните правой кнопкой мыши узел решения в Обозревателе решений.
  2. В контекстном меню выберите Добавить>создать проект.
  3. Задайте для языка значение C++ и введите тестовый в поле поиска. На следующем снимку экрана показаны тестовые проекты, доступные при установке разработки компьютеров с помощью C++ и рабочей нагрузки разработки UWP:

снимок экрана: окно добавления нового проекта с помощью C++, выбранного в Visual Studio 2022.

Создание тестового проекта в Visual Studio 2019

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

Чтобы добавить новый тестовый проект в существующее решение, выполните следующие действия.

  1. Щелкните правой кнопкой мыши на узле решения в обозревателе решений.
  2. В контекстном меню выберите Добавить>создать проект.
  3. Задайте для языка значение C++ и введите тестовый в поле поиска. На следующем снимке экрана показаны тестовые проекты, доступные при установке рабочей нагрузки Разработка рабочего стола с помощью C++ и рабочей нагрузки Разработка UWP:

снимок экрана: окно добавления нового проекта с помощью C++, выбранного в Visual Studio 2019.

Создание ссылок на другие проекты в решении

Чтобы включить доступ к функциям в тестируемом проекте, добавьте ссылку на проект в тестовом проекте. В обозревателе решенийразверните тестовый проект. Щелкните правой кнопкой мыши на References и затем выберите Добавить>ссылку. В диалоговом окне Добавление ссылки выберите проекты, которые требуется протестировать.

снимок экрана: диалоговое окно

Если тестовый код не экспортирует функции, которые вы хотите протестировать, добавьте файлы вывода .obj или .lib в зависимости проекта тестирования. Для получения дополнительной информации см. в разделе по поводу связывания тестов с файлами объектов или файлов библиотеки. Не включайте файлы объектов, имеющие функцию main или другую стандартную точку входа, например wmain, WinMainили DllMain. При добавлении новых исходных файлов в проект обновите зависимости тестового проекта, чтобы включить соответствующие файлы объектов.

Добавление директив #include для файлов заголовков

В файле модульного теста .cpp добавьте директиву #include для всех файлов заголовков, объявляющих типы и функции, которые необходимо протестировать. Введите #include ", и IntelliSense активируется, чтобы помочь вам выбрать. Повторите для всех дополнительных заголовков.

снимок экрана: обозреватель решений с оператором #include с intelliSense, в котором выделен файл заголовка в Visual Studio 2022.

Совет

Чтобы избежать необходимости вводить полный путь в каждом операторе включения в исходном файле, добавьте требуемые папки в Project>Свойства>C/C++>Основные>Дополнительные Каталоги Включения.

Написание методов тестирования

Заметка

В этом разделе показан синтаксис платформы Модульного тестирования Майкрософт для C/C++. Дополнительные сведения см. в справочнике по API Microsoft.VisualStudio.TestTools.CppUnitTestFramework.

Для получения документации по Google Test смотрите руководство . Сведения о Boost.Test см. в библиотеке тестирования Boost: платформа модульных тестов.

Файл .cpp в тестовом проекте имеет класс заглушки и метод, определенный для вас. Они показывают пример написания тестового кода. Сигнатуры используют макросы TEST_CLASS и TEST_METHOD, которые позволяют обнаруживать методы из окна обозревателя тестов.

На снимке экрана показаны класс заглушки и метод, использующие макросы TEST_CLASS и TEST_METHOD в Visual Studio 2022.

Снимок экрана, показывающий класс и метод заглушки, использующие макросы TEST_CLASS и TEST_METHOD в Visual Studio 2019.

TEST_CLASS и TEST_METHOD являются частью Microsoft Native Test Framework. Тестовый проводник обнаруживает методы тестирования в других поддерживаемых фреймворках аналогичным образом.

Тестовый метод (TEST_METHOD) возвращает тип void. Чтобы получить результат теста, используйте статические методы в классе Assert для проверки фактических результатов с ожидаемыми результатами. В следующем примере предполагается, что MyClass имеет конструктор, который принимает std::string. В этом примере показано, как проверить, что конструктор инициализирует класс так, как вы ожидаете:

TEST_METHOD(TestClassInit)
{
    std::string name = "Bill";
    MyClass mc(name);
    Assert::AreEqual(name, mc.GetName());
}

В предыдущем примере результат вызова Assert::AreEqual определяет, проходит ли тест или завершается сбоем. Класс Assert содержит множество других методов для сравнения ожидаемых результатов с фактическими результатами.

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

Выполнение тестов

  1. В меню теста выберите Проводник тестов. На следующем рисунке показан тестовый проект перед выполнением тестов.

    Снимок экрана Test Explorer перед выполнением тестов в Visual Studio 2022.

    снимок экрана: обозреватель тестов перед выполнением тестов в Visual Studio 2019.

    Заметка

    Интеграция CTest с обозревателем тестов пока недоступна. Запустите тесты CTest из главного меню CMake.

  2. Если в окне отсутствуют какие-либо тесты, создайте тестовый проект, щелкнув правой кнопкой мыши узел в обозревателе решений и выбрав Сборка или Перестроить.

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

    снимок экрана: обозреватель тестов после выполнения тестов в Visual Studio 2022.

    снимок экрана: обозреватель тестов после выполнения тестов в Visual Studio 2019.

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

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

Для получения дополнительной информации о модульном тестировании см. Основы модульного тестирования.

Использование CodeLens

Visual Studio 2017 и более поздних версий (профессиональный и корпоративный)

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

Инициализировать CodeLens для проекта модульного теста C++ любым из следующих способов:

  • Измените и создайте тестовый проект или решение.
  • Перестройте проект или решение.
  • Запустите тесты из окна обозревателя тестов.

После инициализации CodeLens вы увидите значки состояния теста над каждым модульным тестом.

снимок экрана: значки C++ CodeLens в Visual Studio 2019.

Щелкните значок для получения дополнительных сведений или выполните или отладите модульный тест:

снимок экрана показывает значок C++ CodeLens после выбора его для получения сведений в Visual Studio 2022.