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

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

Примечание.

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

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

  • Платформа модульного тестирования Майкрософт для C++
  • Google Test
  • Boost.Test
  • CTest

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

Visual Studio 2017 и более поздних версий (Professional и Enterprise)

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

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

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

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

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

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

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

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

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

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

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

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

  1. В Обозревателе решений щелкните правой кнопкой мыши узел решения.
  2. Во всплывающем меню выберите пункты Добавить>Новый проект.
  3. Задайте С++ для параметра Язык и введите "тест" в поле поиска. На приведенном ниже рисунке показаны тестовые проекты, доступные при установке рабочей нагрузки Разработка классических приложений на C++ и Разработка для универсальной платформы Windows.

C++ Test Projects in Visual Studio 2022

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

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

  1. В Обозревателе решений щелкните правой кнопкой мыши узел решения.
  2. Во всплывающем меню выберите пункты Добавить>Новый проект.
  3. Задайте С++ для параметра Язык и введите "тест" в поле поиска. На приведенном ниже рисунке показаны тестовые проекты, доступные при установке рабочей нагрузки Разработка классических приложений на C++ и Разработка для универсальной платформы Windows.

C++ Test Projects in Visual Studio 2019

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

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

Add reference

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

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

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

Screenshot of the Solution Explorer showing an #include directive being added with IntelliSense highlighting a header file for inclusion.

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

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

Примечание.

В этом разделе представлен синтаксис при использовании платформы модульного тестирования Майкрософт для C/C++. Он задокументирован в справочнике по API Microsoft.VisualStudio.TestTools.CppUnitTestFramework. Документацию по Google Test см. на странице Google Test Primer (Начало работы с Google Test). Сведения о Boost.Test см. на странице Boost Test Library: The Unit Test Framework (Библиотека Boost.Test: платформа модульного тестирования).

В CPP-файле в тестовом проекте определены класс-заглушка и метод-заглушка. Они служат примером того, как следует писать код теста. В сигнатурах используются макросы TEST_CLASS и TEST_METHOD, что позволяет обнаруживать методы в окне обозревателя тестов.

Screenshot of the Test Explorer window that shows the unittest1.cpp code file containing a stub class and method using the TEST_CLASS and TEST_METHOD macros.

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

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

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

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

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

Запуск тестов

  1. В меню Тест выберите пункт Windows>, а затем пункт Обозреватель тестов. На рисунке ниже показан тестовый проект, тесты которого еще не выполнялись.

    Test Explorer before running tests

    Примечание.

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

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

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

    Test Explorer after tests are run

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

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

Дополнительные сведения о модульном тестировании см. в статье Основные сведения о модульных тестах.

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

Visual Studio 2017 и более поздних версий (выпуски Professional и Enterprise)

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

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

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

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

C++ CodeLens Icons

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

C++ CodeLens Run and Debug