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

时间:2010-11-28 21:55:42

标签: 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 ;

3 个答案:

答案 0 :(得分:15)

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

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

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

答案 1 :(得分:11)

我在https://github.com/rpavlik/cmake-modules/制作了一些模块,包括一些用于集成boost测试的模块 - 请参阅该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)

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

答案 2 :(得分:-3)

参见CMake文档/书中的CMake测试项目和/或CTest。