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

标签 c++ unit-testing cmake ctest catch-unit-test

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

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

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

我已经 promise cmake script到 CatchLib ,用于 Catch 与 CTest 的集成。这是 Fraser99 的 cmake 脚本 here 的简化版本

最佳答案

将 Catch 与 CMake 集成相当简单,因为它是一个仅包含 header 的库。

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

您可以假设 Catch 源已经安装在构建机器上,或者使用 ExternalProject用于在构建过程中获取它们。

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

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,则该版本带有自己的包配置文件,因此您可以调用 find_package 进行集成.这提供了a smoother CMake integration overall而且您不必开始定义自己的界面目标。虽然即使使用 Catch2,上述方法仍然有效,但如果您的 Catch 版本已经支持,我建议使用 find_package

关于c++ - Catch lib(单元测试)和 CTest(CMake)集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34896891/

相关文章:

C++11 Cereal 库无法序列化我的类

c++ - 如何知道异步状态机何时终止。 ( boost::状态图)

c# - 如何在 AutoFixture 中设置更复杂(类似 IoC)的注册

opencv - 适用于Pandaboard Ubuntu的CMake与OpenCV交叉编译

c++ - 在同一个 CMakeList 文件中导入两个不同的项目

c++ - 无法解决有关此代码的难题

c++ - boost 将 unordered_map 保存到磁盘的能力

java - 如何在 Spring Boot 中设置 Camunda 进行单元测试

unit-testing - 大单元测试数据

c++ - 将 curlpp 添加到 cmake 项目