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。
我正在寻找 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。