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

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

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

обновление (решение найдено):

Я совершил скрипт cmake в CatchLib, для интеграции Catch с CTest. это упрощенная версия скрипта Fraser99 cmake Вот

18

Решение

Интеграция 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 это делает это, если вам нужно увидеть полный рабочий пример.

35

Другие решения

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, хотя.

4

По вопросам рекламы [email protected]