我的项目使用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 ;
答案 0 :(得分:15)
CMake本身只是一个构建系统; CTest是一个与CMake集成的测试运行器。也不是单元测试框架;这项工作可以通过Boost.Test或googletest来完成。
要在CMake项目中使用基于Boost.Test的单元测试程序,您首先要使用{{1}中的add_executable
和target_link_libraries
进行CMake构建并链接单元测试二进制文件脚本。然后,您可以将单元测试二进制文件添加到CTest的测试列表中,以便与CMakeLists.txt
和enable_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。