Интеграция Catch lib (модульное тестирование) и CTest (CMake)
Я ищу успешный пример Catch CatchLib интеграция с тестом CMake (Ctest). как я понимаю, это дополнительный скрипт cmake, который должен анализировать выход приложения? Кто-то уже написал это? наверное, поделился этим?
==================================================
обновление (решение найдено) :
Я совершил С CMake скрипт для CatchLib, для интеграции Catch с CTest. это упрощенная версия скрипта cmake Fraser99 здесь
2 ответов
интеграция 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 зависит от Catch используя 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
.
EDIT: в качестве альтернативы, вы можете иметь CMake скачать Catch от git во время сборки, следуя эти инструкции из GitHub улова. Однако это требует зависимости от git.