捕获lib(单元测试)和CTest(CMake)集成

ami*_*421 20 c++ unit-testing cmake ctest catch-unit-test

我正在寻找Catch CatchLib与CMake测试(Ctest)集成的成功示例.据我所知这是另外的cmake脚本,它必须解析应用程序输出?有人写过这个吗?可能分享了这个?

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

更新(已找到解决方案):

我已经向CatchLib 提交了cmake脚本,用于集成Catch与CTest.这是Fraser99的CMake的脚本的简化版本,在这里

Com*_*sMS 38

将Catch与CMake集成非常简单,因为它是一个仅限标头的库.

以下是您需要做的快速简要介绍:

您可以假设Catch源已经安装在构建计算机上,或者使用ExternalProject作为构建过程的一部分来获取它们.

在任何一种情况下,您最终都会在构建计算机上的某个已知目录中使用Catch头文件.我建议创建一个接口目标,以使测试可执行文件知道此信息:

add_library(Catch INTERFACE)
target_include_directories(Catch INTERFACE ${YOUR_CATCH_INCLUDE_DIR})
Run Code Online (Sandbox Code Playgroud)

这样,您可以简单地将Catch指定为依赖项target_link_libraries:

add_executable(my_test ${MY_TEST_SOURCES})
target_link_libraries(my_test Catch)
Run Code Online (Sandbox Code Playgroud)

和CMake一样,add_test负责将测试引入CTest:

enable_testing()
add_test(NAME MyAwesomeTest COMMAND my_test)
Run Code Online (Sandbox Code Playgroud)

就是这样.运行make test在建项目运行测试.

我有一个关于Github项目,如果你需要看一个完整的工作示例,我会这样做.


ric*_*cab 6

使用以下方法安装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
Run Code Online (Sandbox Code Playgroud)

然后将以下内容添加到CMakeLists.txt:

find_package(Catch2 REQUIRED)
target_link_libraries(tests Catch2::Catch2)
Run Code Online (Sandbox Code Playgroud)

这里