如何在基于CMake的项目中使用Boost.Test?

for*_*neo 15 c++ boost cmake boost-test

我的项目使用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 ;
Run Code Online (Sandbox Code Playgroud)

Ben*_*rel 15

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

要在CMake的项目使用基于如Boost.Test单元测试程序,你首先必须建立的CMake和链接单元测试二进制文件,使用add_executabletarget_link_libraries在你的CMakeLists.txt脚本.然后,您可以将单元测试二进制文件添加到CTest的测试列表中以使用enable_testing和运行add_test.

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


Rya*_*lik 11

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

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

include(BoostTestTargets)
add_boost_test(DimensionedQuantities
 SOURCES
 test_DimensionedQuantities.cpp)
Run Code Online (Sandbox Code Playgroud)

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

include(BoostTestTargets)
add_boost_test(DimensionedQuantities
 SOURCES
 test_DimensionedQuantities.cpp
 TESTS
 CheckCollision
 BodyPoseNotCorrupted
 CheckGraspTransform
 BodyFollowsMockManip1D
 BodyFollowsMockManip2D
 BodyFollowsMockManip3D)
Run Code Online (Sandbox Code Playgroud)

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