Catch lib (модульное тестирование) и интеграция CTest (CMake)

Я ищу успешный пример интеграции Catch CatchLib с тестом CMake (Ctest). как я понимаю, это дополнительный cmake script, который должен разобрать приложение? Кто-то уже написал это? возможно, поделился этим?

=============================================== ===

update (решение найдено):

Я передал cmake script в CatchLib, для интеграции Catch with CTest. это упрощенная версия Fraser99 cmake script здесь

Ответы

Ответ 1

Интеграция Catch с CMake довольно проста, так как это библиотека только для заголовков.

Вот краткое описание того, что вам нужно сделать:

Вы можете либо предположить, что источники Catch уже установлены на машине сборки, либо используйте ExternalProject для получения их как части процесса сборки.

В любом случае вы получите файлы заголовков Catch в каком-либо известном каталоге на вашей машине сборки. Я бы рекомендовал создать целевой интерфейс для того, чтобы эта информация была известна вашим тестовым исполняемым файлам:

add_library(Catch INTERFACE)
target_include_directories(Catch INTERFACE ${YOUR_CATCH_INCLUDE_DIR})

Таким образом, вы можете просто указать Catch как зависимость от target_link_libraries:

add_executable(my_test ${MY_TEST_SOURCES})
target_link_libraries(my_test Catch)

Как обычно в CMake, add_test позаботится о введении тестов в CTest:

enable_testing()
add_test(NAME MyAwesomeTest COMMAND my_test)

И это уже. Запустите make test в встроенном проекте для запуска тестов.

У меня есть проект на Github, который делает это, если вам нужно увидеть полный рабочий пример.

Ответ 2

Установите catch с:

 $ git clone https://github.com/catchorg/Catch2 <catch_src_dir>
 $ mkdir <catch_bin_dir>
 $ cd <catch_bin_dir>
 $ cmake -DBUILD_TESTING:BOOL=FALSE <catch_src_dir>
 $ make
 $ make install

Затем добавьте следующее в CMakeLists.txt:

find_package(Catch2 REQUIRED)
target_link_libraries(tests Catch2::Catch2)

Смотрите здесь