Лучшие практики для модульного тестирования с Catch2 в Visual Studio - PullRequest
0 голосов
/ 08 января 2020

Я новичок в модульном тестировании в C ++ и хочу получить совет по этому вопросу. Я использую Visual Studio 2019 для разработки и выбрал Catch2 в качестве своей библиотеки тестирования, также я установил Тестовый адаптер для Catch2.

Я прочитал документы для Catch2 и Тестовый адаптер для Catch2 на GitHub, но все еще не могу выяснить, как правильно использовать модульный тест в Visual Studio.

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

Когда я пробую первый подход, Test Explorer не обнаруживает тесты, пока я не закомментирую main () функция проекта. При втором подходе я получаю кучу неразрешенных внешних ошибок символов для методов моих классов, хотя я устанавливаю правильные относительные пути к заголовочным файлам и ссылаюсь на основной проект из тестового проекта:

LNK2019 unresolved external symbol "public: bool __thiscall MyClass::Check(int,int)" (?Check@MyClass@@QAE_NHH@Z) referenced in function "void __cdecl ____C_A_T_C_H____T_E_S_T____0(void)" (?____C_A_T_C_H____T_E_S_T____0@@YAXXZ)

Буду признателен если кто-то покажет мне правильный способ выполнения модульного тестирования с Catch2 в VS.

1 Ответ

0 голосов
/ 12 января 2020

ОК, полагаю, я нашел подходящий рабочий процесс, чтобы тест Catch2 работал в Visual Studio 2019:

  1. Создание нового проекта с решением тестируемого проекта (PuT) . Это будет наш тестовый проект.
  2. Добавьте ссылку на PuT из тестового проекта .
  3. В тестовом проекте создайте исходный файл и поместите следующие строки в нем :
#define CATCH_CONFIG_MAIN
#include "path_to_catch2/catch.hpp"
Напишите несколько тестов . У вас может быть столько исходных файлов с тестами, сколько вам нужно, но помните, что только один из них должен иметь объявление #define CATCH_CONFIG_MAIN. В свойствах конфигурации проекта тестирования установите следующие параметры :
  • Линкер -> Общие -> Дополнительные каталоги библиотек - добавьте сюда путь к каталогу объектных файлов PuT.
  • Линкер -> Ввод -> Дополнительно Зависимости - здесь указываются имена объектов PuT (не пути, а только имена файлов .OBJ!), Разделенные точкой с запятой, которые использовались в тестах. Например, если вы хотите протестировать некоторый код, объявленный в MyCode.h , укажите здесь MyCode.obj имя файла. Когда вы ссылаетесь на другие файлы заголовков из PuT, не забудьте обновить этот параметр.
Открыть Test Explorer . Добавьте файл .runsettings с решением root в папку . Минимальная конфигурация выглядит следующим образом:

    <?xml version="1.0" encoding="utf-8"?>
    <RunSettings>
        <Catch2Adapter>
            <FilenameFilter>^Test_</FilenameFilter>
        </Catch2Adapter>
    </RunSettings>

, где <FilenameFilter> контролирует фильтр для имен файлов тестовых проектов. В этом конкретном примере тесты будут обнаружены только в проектах, имена которых начинаются с «Test _».

Выберите этот файл .runsettings в Тестировать -> Настроить параметры запуска -> Выбрать файл широкого набора настроек решения . Вы можете иметь несколько файлов .runsettings с различной конфигурацией, здесь вы можете переключать их в любой момент. Перестройте решение , чтобы обнаружить тесты.

Теперь вы должны видеть ваши тесты в Test Explorer.


Некоторые полезные ссылки:

https://docs.microsoft.com/en-us/visualstudio/test/how-to-use-microsoft-test-framework-for-cpp?view=vs-2019

https://github.com/JohnnyHendriks/TestAdapter_Catch2/blob/master/Docs/Walkthrough.md

...