Написание модульных тестов для 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
Определите и выполните модульные тесты в одном или нескольких тестовых проектах . Тестовый проект создает отдельное приложение, которое вызывает код в исполняемом файле и сообщает о его поведении. Создайте тестовые проекты в том же решении, что и код, который требуется протестировать.
Чтобы добавить новый тестовый проект в существующее решение, выполните следующие действия.
- Щелкните правой кнопкой мыши узел решения в Обозревателе решений.
- В контекстном меню выберите Добавить>создать проект.
- Задайте для языка значение C++ и введите тестовый в поле поиска. На следующем снимку экрана показаны тестовые проекты, доступные при установке разработки компьютеров с помощью C++ и рабочей нагрузки разработки UWP:
Создание тестового проекта в Visual Studio 2019
Определите и запустите тесты в одном или нескольких тестовых проектах. Создайте проекты в том же решении, что и код, который требуется протестировать.
Чтобы добавить новый тестовый проект в существующее решение, выполните следующие действия.
- Щелкните правой кнопкой мыши на узле решения в обозревателе решений.
- В контекстном меню выберите Добавить>создать проект.
- Задайте для языка значение C++ и введите тестовый в поле поиска. На следующем снимке экрана показаны тестовые проекты, доступные при установке рабочей нагрузки Разработка рабочего стола с помощью C++ и рабочей нагрузки Разработка UWP:
Создание ссылок на другие проекты в решении
Чтобы включить доступ к функциям в тестируемом проекте, добавьте ссылку на проект в тестовом проекте. В обозревателе решенийразверните тестовый проект. Щелкните правой кнопкой мыши на References и затем выберите Добавить>ссылку. В диалоговом окне Добавление ссылки выберите проекты, которые требуется протестировать.
Ссылка на файлы объектов или библиотек
Если тестовый код не экспортирует функции, которые вы хотите протестировать, добавьте файлы вывода .obj
или .lib
в зависимости проекта тестирования. Для получения дополнительной информации см. в разделе по поводу связывания тестов с файлами объектов или файлов библиотеки. Не включайте файлы объектов, имеющие функцию main
или другую стандартную точку входа, например wmain
, WinMain
или DllMain
. При добавлении новых исходных файлов в проект обновите зависимости тестового проекта, чтобы включить соответствующие файлы объектов.
Добавление директив #include для файлов заголовков
В файле модульного теста .cpp
добавьте директиву #include
для всех файлов заголовков, объявляющих типы и функции, которые необходимо протестировать. Введите #include "
, и IntelliSense активируется, чтобы помочь вам выбрать. Повторите для всех дополнительных заголовков.
Совет
Чтобы избежать необходимости вводить полный путь в каждом операторе включения в исходном файле, добавьте требуемые папки в Project>Свойства>C/C++>Основные>Дополнительные Каталоги Включения.
Написание методов тестирования
Заметка
В этом разделе показан синтаксис платформы Модульного тестирования Майкрософт для C/C++. Дополнительные сведения см. в справочнике по API Microsoft.VisualStudio.TestTools.CppUnitTestFramework.
Для получения документации по Google Test смотрите руководство . Сведения о Boost.Test см. в библиотеке тестирования Boost: платформа модульных тестов.
Файл .cpp
в тестовом проекте имеет класс заглушки и метод, определенный для вас. Они показывают пример написания тестового кода. Сигнатуры используют макросы TEST_CLASS и TEST_METHOD, которые позволяют обнаруживать методы из окна обозревателя тестов.
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
содержит множество других методов для сравнения ожидаемых результатов с фактическими результатами.
Вы можете добавить атрибуты в методы тестирования, чтобы указать владельцев тестов, приоритет и другую информацию. Затем эти значения можно использовать для сортировки и группирования тестов в обозревателе тестов. Дополнительные сведения см. в разделе Запуск модульных тестов с помощью обозревателя тестов.
Выполнение тестов
В меню теста выберите Проводник тестов. На следующем рисунке показан тестовый проект перед выполнением тестов.
Заметка
Интеграция CTest с обозревателем тестов пока недоступна. Запустите тесты CTest из главного меню CMake.
Если в окне отсутствуют какие-либо тесты, создайте тестовый проект, щелкнув правой кнопкой мыши узел в обозревателе решений и выбрав Сборка или Перестроить.
В обозревателе тестоввыберите Запустить всёили выберите конкретные тесты для запуска. Щелкните правой кнопкой мыши на тест, чтобы увидеть другие параметры, включая выполнение его в режиме отладки с включенными точками останова. После выполнения всех тестов в окне отображаются тесты, которые прошли и которые завершились сбоем.
Для неудачных тестов в сообщении отображаются сведения, которые помогают диагностировать причину. Щелкните правой кнопкой мыши по тесту, который завершился с ошибкой, чтобы открыть всплывающее меню. Выберите отладку, чтобы выполнить шаг через функцию, в которой произошел сбой.
Дополнительные сведения об использовании обозревателя тестовсм. в разделе Запуск модульных тестов с помощью обозревателя тестов.
Для получения дополнительной информации о модульном тестировании см. Основы модульного тестирования.
Использование CodeLens
Visual Studio 2017 и более поздних версий (профессиональный и корпоративный)
CodeLens позволяет быстро просмотреть состояние модульного теста без выхода из редактора кода.
Инициализировать CodeLens для проекта модульного теста C++ любым из следующих способов:
- Измените и создайте тестовый проект или решение.
- Перестройте проект или решение.
- Запустите тесты из окна обозревателя тестов.
После инициализации CodeLens вы увидите значки состояния теста над каждым модульным тестом.
Щелкните значок для получения дополнительных сведений или выполните или отладите модульный тест: