Я ищу успешный пример Catch CatchLib интеграция с тестом CMake (Ctest). насколько я понимаю, это дополнительный сценарий cmake, который должен анализировать выходные данные приложения?
Кто-то уже писал это? наверное поделились этим?
==================================================
обновление (решение найдено):
Я совершил скрипт cmake в CatchLib, для интеграции Catch с CTest. это упрощенная версия скрипта Fraser99 cmake Вот
Интеграция 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 это делает это, если вам нужно увидеть полный рабочий пример.
EDIT2: в наши дни Catch2 устанавливает собственный модуль cmake, поэтому после установки его можно использовать в другом проекте cmake с
include(GNUInstallDirs)
find_package(Catch2 REQUIRED)
Вы можете сделать свой проект CMake зависеть от улова с помощью find_package
, Таким образом, вы не включаете Catch самостоятельно и можете обновить его самостоятельно. Процесс объясняется в этот рецепт, за исключением того, что в этом случае вам не нужно иметь дело с библиотеками, поскольку Catch является только заголовком
CMakeLists.txt (при условии, что у вас есть FindCatch.cmake на месте [см. ниже] и ваши тесты в my_tests.cpp):
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/Modules/")
find_package(Catch REQUIRED)
include_directories(${CATCH_INCLUDE_DIRS})
add_executable(my_tests my_tests.cpp)
add_test(NAME MyTests COMMAND my_tests)
Пример my_tests.cpp:
#define CATCH_CONFIG_MAIN // This tells Catch to provide a main()
#include "catch/catch.hpp"
#include "stuff_to_test.h"
TEST_CASE("A test case")
{
...
}
...
Вам нужно будет добавить FindCatch.cmake модуль для вашего проекта, под cmake/Modules
, Поиск в Интернете для FindCatch.cmake.
Наконец, вы можете создавать и запускать тесты с make test
,
РЕДАКТИРОВАТЬ: В качестве альтернативы, вы можете иметь cmake скачать Catch from git во время сборки, следуя эти инструкции из GitHub Поймать. Это требует зависимости от GIT, хотя.