15

我的项目使用 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 ;
4

3 回答 3

15

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

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

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

于 2010-11-28T23:10:26.823 回答
11

我在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 文件信息。

于 2010-11-30T21:19:27.283 回答
-5

请参阅 CMake 文档/书中的 CMake 测试项目和/或 CTest 内容。

于 2010-11-28T22:02:22.130 回答