Расширение моего комментария к ответу @ KennyKerr для тех, кто интересуется ...
Если вы планируете использовать Catch2 в соответствии с рекомендациями, тогда шаблон консольного приложения C ++ / WinRT Windows является отличной отправной точкой.Практически все, что вам нужно сделать, это настроить main () для настройки Catch2 и начать писать тестовые примеры.Моя единственная жалоба заключается в том, что шаблоны C ++ / WinRT не позволяют добавлять ссылки на проекты компонентов среды выполнения Windows через пользовательский интерфейс (это необходимо сделать, отредактировав vcxproj).Вероятно, существует аналогичная проблема с добавлением ссылок на пакеты NuGet.
Как отмечалось в моем комментарии выше, на рынке есть тестовый адаптер Catch2 для Visual Studio 2017/2019.Имейте в виду, что для включения адаптера требуется файл .runsettings, который сообщает ему, какие проекты являются тестовыми приложениями Catch2 (через регулярное выражение).Без правильно настроенных параметров запуска он не найдет ваши тесты.Мне также пришлось увеличить тайм-аут обнаружения, иначе он иногда «забывал» мои тесты.
Что касается покрытия кода, при использовании Visual Studio вы можете настроить покрытие кода для включения / исключения функций в файле .runsettings.,См. Сайт Microsoft для подробностей.Для себя я добавил следующее в раздел CodeCoverage, и он пока работает довольно хорошо:
<Functions>
<Include>
<Function>.*YourNamespaceHere.*</Function>
</Include>
<Exclude>
<Function>winrt.*GetRuntimeClassName</Function>
<Function>winrt::impl.*</Function>
<Function>winrt::(?!YourNamespaceHere).*</Function>
</Exclude>
</Functions>
Для тех, кто пытается протестировать C ++ / WinRT Windows Runtime Component, как я, и имеет код, который некак часть интерфейса WRC, вот что я сделал, чтобы сделать этот тестируемый ...
- Создание проекта общих элементов C ++
- Перемещение всего кода для среды выполнения WindowsКомпонент (WRC) проекта в проекте общих элементов, и из проекта WRC.В дальнейшем добавляйте / удаляйте файлы только из общего проекта.Таким образом, вам не нужно прикасаться к проектам WRC или Test при добавлении / удалении файлов.
- Добавьте ссылку на этот проект общих элементов как в исходном проекте WRC, так и в тестовом проекте
- Убедитесь, что ваш тестовый проект и проект WRC настроены одинаково с учетом параметров компиляции и ссылок проекта / NuGet
- Отредактируйте тестовый проект и убедитесь, что RootNamespace настроен так же, как проект WRC (возможно, это необходимо сделатьчерез ваш любимый редактор).Это необходимо, в противном случае сгенерированные заголовки будут иметь префикс с пространством имен и, следовательно, не будут найдены общим кодом.
- (Необязательно для покрытия кода) В тестовом проекте включите профилирование (Linker> Advanced>Профиль> Да)
Теперь вы сможете писать тесты, которые используют личный код.Что касается того, является ли это лучшим подходом, я оставляю читателю.Это работает для меня, и код, который я тестирую, достаточно прост, поэтому я не слишком обеспокоен тем, что определения проекта не выровнены идеально.Ваш пробег может отличаться.
Я отмечу, что вышеизложенное также можно использовать для работы «Проекта Native Unit Test» с C ++ / WinRT, у вас есть только дополнительные шаги по интеграции битов C ++ / WinRT всначала тестовый проект.