Использование платформы модульного тестирования Майкрософт для C++ в Visual Studio
Платформа модульного тестирования Майкрософт для C++ включена по умолчанию в рабочую нагрузку Разработка классических приложений на C++.
Написание модульных тестов в отдельном проекте
Как правило, тестовый код запускается в отдельном проекте в том же решении, что и тестируемый код. Инструкции по созданию и настройке тестового проекта см. в статье Создание модульных тестов для C/C++.
Написание модульных тестов в одном проекте
В некоторых случаях, например при тестировании функций в библиотеке DLL, которые не экспортируются, может потребоваться создать тесты в том же проекте, что и тестируемая программа. Чтобы создать модульные тесты в том же проекте, выполните указанные ниже действия.
Измените свойства проекта так, чтобы он включал заголовки и файлы библиотек, которые необходимы для модульного тестирования.
В обозревателе решений в контекстном меню тестируемого проекта выберите пункт Свойства. Откроется окно свойств проекта.
В диалоговом окне "Страницы свойств" выберите Свойства конфигурации>Каталоги VC++.
Щелкните стрелку вниз в следующих строках и выберите <Правка>. Добавьте следующие пути:
Directory Свойство Каталоги включаемых файлов $(VCInstallDir)Auxiliary\VS\UnitTest\include Каталоги библиотек $(VCInstallDir)Auxiliary\VS\UnitTest\lib
Добавьте файл модульного тестирования С++:
Щелкните правой кнопкой мыши узел проекта в обозревателе решений и последовательно выберите Добавить>Новый элемент.
В диалоговом окне Добавление нового элемента выберите Файл C++ (.cpp), присвойте ему имя и нажмите Добавить.
Связывание тестов с файлами объектов или библиотеки
Если тестируемый код не экспортирует функции, которые необходимо проверить, можно добавить файл OBJ или LIB в зависимости тестового проекта. Измените свойства тестового проекта так, чтобы он включал заголовки и файлы библиотек или объектов, которые необходимы для модульного тестирования.
В обозревателе решений в контекстном меню тестового проекта выберите пункт Свойства. Откроется окно свойств проекта.
Перейдите на страницу Свойства конфигурации>Компоновщик>Входные данные и выберите пункт Дополнительные зависимости.
Выберите Изменить и добавьте имена файлов .obj или .lib. Не используйте полные пути.
Перейдите на страницу Свойства конфигурации>Компоновщик>Общие и выберите пункт Дополнительные каталоги библиотек.
Выберите Изменить и добавьте путь к каталогу файлов .obj или .lib. Путь обычно находится внутри папки построения тестируемого проекта.
Перейдите на страницу Свойства конфигурации>Каталоги VC++ и выберите пункт Включаемые каталоги.
Выберите Изменить, а затем добавьте каталог заголовков тестируемого проекта.
Написание тестов
В каждом CPP-файле с тестовыми классами должен быть заголовок CppUnitTest.h и оператор using для using namespace Microsoft::VisualStudio::CppUnitTestFramework
. Тестовый проект уже настроен. Кроме того, он включает определение пространства имен и класс TEST_CLASS с методом TEST_METHOD, чтобы вы могли сразу приступить к работе. Вы можете изменить имя пространства имен и имена в скобках в макросах класса и метода.
Для инициализации тестовых модулей, классов и методов теста, а также для очистки ресурсов по завершении тестов в платформе тестирования определены специальные макросы. Они создают код, который выполняется перед первым обращением к классу или методу и после завершения последнего теста. Дополнительные сведения см. в разделе Инициализация и очистка.
Для определения условий теста используйте статические методы в классе Assert. Используйте класс Logger для вывода сообщений в окне вывода. Добавление атрибутов в методы теста
Запуск тестов
В меню Тест выберите пункт Windows>, а затем пункт Обозреватель тестов.
Если в окне видны не все тесты, выполните сборку тестового проекта, щелкнув его узел в обозревателе решений правой кнопкой мыши и выбрав пункт Сборка или Перестроить.
В обозревателе тестов нажмите Запустить все или выберите тесты, которые следует запустить. Щелкните тест правой кнопкой мыши, чтобы получить доступ к другим командам, включая запуск в режиме отладки с включенными точками останова.
В окне вывода выберите в раскрывающемся списке пункт Тесты, чтобы просмотреть сообщения, полученные от класса
Logger
:
Определение признаков для группирования
Для методов теста можно определять признаки, с помощью которых можно классифицировать и группировать тесты в обозревателе тестов. Чтобы определить признак, используйте макрос TEST_METHOD_ATTRIBUTE
. Например, чтобы определить признак с именем TEST_MY_TRAIT
, выполните следующее.
#define TEST_MY_TRAIT(traitValue) TEST_METHOD_ATTRIBUTE(L"MyTrait", traitValue)
Для использования определенных признаков в модульных тестах введите все указанное ниже.
BEGIN_TEST_METHOD_ATTRIBUTE(Method1)
TEST_OWNER(L"OwnerName")
TEST_PRIORITY(1)
TEST_MY_TRAIT(L"thisTraitValue")
END_TEST_METHOD_ATTRIBUTE()
TEST_METHOD(Method1)
{
Logger::WriteMessage("In Method1");
Assert::AreEqual(0, 0);
}
Макросы атрибута признака C++
В CppUnitTest.h
имеются указанные ниже предварительно определенные признаки. Дополнительные сведения см. в разделе Справочные материалы по API платформы модульного тестирования Майкрософт для C++.
Макрос | Description |
---|---|
TEST_METHOD_ATTRIBUTE(attributeName, attributeValue) |
Используйте макрос TEST_METHOD_ATTRIBUTE, чтобы определить признак. |
TEST_OWNER(ownerAlias) |
Стандартный признак "Владелец" позволяет указать владельца метода теста. |
TEST_PRIORITY(priority) |
Стандартный признак "Приоритет" служит для назначения относительного приоритета методам теста. |