【问题标题】:How can I use Boost.Test in a CMake based project?如何在基于 CMake 的项目中使用 Boost.Test?
【发布时间】:2011-05-17 00:09:30
【问题描述】:

我的项目使用 CMake 作为其构建系统,我希望它执行我的 Boost.Test 测试用例。

我怎样才能做到这一点?在 Boost.Build 中,我可以这样做:

import testing ;

use-project /my_lib : ../src ;

unit-test my_test
          : my_test.cpp
            /my_lib
          boost_unit_test_framework
        ;

lib boost_unit_test_framework ;

【问题讨论】:

    标签: c++ boost cmake boost-test


    【解决方案1】:

    CMake 本身只是一个构建系统; CTest 是一个与 CMake 集成的公正测试运行器。单元测试框架也不是。这项工作可以由 Boost.Test 或 googletest 完成。

    要在 CMake 项目中使用基于 Boost.Test 的单元测试程序,您首先需要在 CMakeLists.txt 脚本中使用 add_executabletarget_link_libraries 构建 CMake 并链接您的单元测试二进制文件。然后,您可以将单元测试二进制文件添加到测试列表中,以便 CTest 使用 enable_testingadd_test 运行。

    如果您想变得真正花哨,您可以查看 CMake 文档,了解如何让 CMake 搜索您的所有源文件以自动查找和构建单元测试,但首先...

    【讨论】:

    【解决方案2】:

    我在 https://github.com/rpavlik/cmake-modules/ 制作了一些模块,包括一些用于集成升压测试的模块 - 请参阅该 repo 中的自述文件,了解使用它们的最简单方法。

    然后,假设 test_DimensionedQuantities.cpp 是 boost.test 测试驱动程序源,您需要执行以下操作。

    include(BoostTestTargets)
    add_boost_test(DimensionedQuantities
     SOURCES
     test_DimensionedQuantities.cpp)
    

    这只会添加一个 CTest 可见测试,如果任何增强测试失败,该测试就会失败。如果您有可以通过名称指定给测试驱动程序的测试(最简单的宏属于此类),您可以执行以下操作:

    include(BoostTestTargets)
    add_boost_test(DimensionedQuantities
     SOURCES
     test_DimensionedQuantities.cpp
     TESTS
     CheckCollision
     BodyPoseNotCorrupted
     CheckGraspTransform
     BodyFollowsMockManip1D
     BodyFollowsMockManip2D
     BodyFollowsMockManip3D)
    

    还有更多选项,包括配置标头以选择最佳选项 a:包含的 UTF 版本、b:静态链接或 c:动态链接,以及链接库等。只需查看获取信息的 cmake 文件。

    【讨论】:

      【解决方案3】:

      请参阅 CMake 文档/书籍中的 CMake 测试项目和/或 CTest 资料。

      【讨论】:

      • 那好像是一个不同的测试框架,难道没有办法使用Boost.Test吗?
      • 正确的答案是你应该使用 CTest。如果您这样做了,那么您将能够make test 和/或使用带有/不带有仪表板的 ctest 来构建和运行您想要的任何程序。再次,查看 CMake 文档。
      猜你喜欢
      • 2023-03-24
      • 2017-09-10
      • 1970-01-01
      • 2021-04-07
      • 2017-04-10
      • 1970-01-01
      • 2021-11-05
      • 2014-04-08
      • 2020-08-23
      相关资源
      最近更新 更多