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

Catch lib (unit testing) and CTest (CMake) integration

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

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

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

我已经承诺 cmake script to CatchLib , for the integration Catch with CTest. this is a simplified version of Fraser99's cmake script here

将 Catch 与 CMake 集成非常简单,因为它是一个 header-only 库。

以下是您必须执行的操作的简要说明:运行

您可以假设 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 PUBLIC Catch)

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

enable_testing()
add_test(NAME MyAwesomeTest COMMAND my_test)

就这样了。 运行 make test 在构建的项目上 运行 你的测试。

如果您需要查看完整的工作示例,我有一个 project on Github 可以执行此操作。

更新 Catch 的新版本: 如果您已经升级到 Catch2,那么它带有自己的包配置文件,因此您可以调用 [=21 集成它=] 而且您不必开始定义自己的接口目标。虽然上述方法在 Catch2 中仍然有效,但如果您的 Catch 版本已经支持它,我建议使用 find_package

安装 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)

参见here