GoogleTest 入门(2) CMake 项目中引入 GTest

0. 前言

  • 场景很简单:自己的项目中创建了一系列单元测试,如何引入 GTest,如何执行测试。

  • 准备工作:

git clone https://github.com/google/googletest.git
cd googletest
mkdir build && cd build && cmake .. && make -j4
sudo make install
sudo ldconfig

1. 方式一:完全不使用CMake特殊语法

  • 所谓特殊语法,就是 CMake 中的 add_test 等。

  • 如何引入:默认通过 sudo make install 后,头文件和静态链接库也都在系统路径下了。

add_executable(tests ${PROJECT_SOURCE_DIR}/tests/tests.cc)
target_link_libraries(tests gtest_main gmock_main pthread)
  • 如何进行测试:直接当做普通可执行文件执行即可,如 ./tests

2. 方式二:ctest

  • ctest 是 CMake 提供的测试工具。
  • 引入测试相关特殊语法主要包括
    • enable_testing:必须要有该语句,后续才能添加测试,即 add_test
    • add_test:添加测试用例,格式如下。
add_test(NAME <name> [CONFIGURATIONS [Debug|Release|...]]
         [WORKING_DIRECTORY dir]
         COMMAND <command> [arg1 [arg2 ...]])

  • 从上面的格式可以看出,add_test 对应了一个 COMMAND。
    • 换句话说,所有测试用例都基于其各自的 COMMAND。
    • 那我们需要通过 add_executable 来创建一个 COMMAND,包含所有测试的方法。
enable_testing()

add_executable(test_example test.cpp)
target_link_libraries(test_example example_lib)

add_test(NAME test_example1 COMMAND test_example --arg1=a --arg2=b)
add_test(NAME test_example2 COMMAND test_example --arg1=c --arg2=d)
  • ctest与gtest联合使用的实例(参考这里
cmake_minimum_required(VERSION 2.8)

add_executable(add-test main.cpp)
target_link_libraries(add-test
    gtest
    gtest_main
    pthread
    )

add_test(
    NAME add
    COMMAND $<TARGET_FILE:add-test>
    )

# run with: ctest -L lib
set_property(
    TEST add
    PROPERTY LABELS lib add
    )
  • 执行测试用例(三选一)
make test

cmake --build . --target test

ctest

3. 方式三:find_package

  • 我也不知道是哪一步安装了 google test 相关的 find_pakcage 配置文件,猜测是 sudo make install,但在install列表中没看到。
  • 相关内容参考官方文档
    • 注意大小写
find_package(GTest)
include_directories(${GTEST_INCLUDE_DIRS})
MESSAGE(${GTEST_INCLUDE_DIRS})
MESSAGE(${GTEST_BOTH_LIBRARIES})
MESSAGE(${GTEST_LIBRARIES})
MESSAGE(${GTEST_MAIN_LIBRARIES})

add_executable(tests ${PROJECT_SOURCE_DIR}/src/tests.cc)
target_link_libraries(tests ${GTEST_BOTH_LIBRARIES} pthread)
# target_link_libraries(tests GTest::GTest GTest::Main pthread)
# target_link_libraries(tests gmock_main gtest_main pthread)

4. 方式四:使用 CMake 中 GTest 相关的特殊语法

cmake_minimum_required(VERSION 3.14)
project(my_project)

# GoogleTest requires at least C++11
set(CMAKE_CXX_STANDARD 11)

include(FetchContent)
FetchContent_Declare(
  googletest
  URL https://github.com/google/googletest/archive/609281088cfefc76f9d0ce82e1ff6c30cc3591e5.zip
)
# For Windows: Prevent overriding the parent project's compiler/linker settings
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(googletest)

# 开启测试
enable_testing()

add_executable(
  hello_test
  hello_test.cc
)
target_link_libraries(
  hello_test
  gtest_main
)

# 下面两句 enable CMake’s test runner to discover the tests included in the binary, using the GoogleTest CMake module
include(GoogleTest)
gtest_discover_tests(hello_test)
  • 编译、执行过程
cmake -S . -B build
cmake --build build
cd build && ctest
  • 主要语法就是
    • gtest_add_tests:搜索源码中的 GTest 相关宏
    • gtest_discover_tests:搜索测试可执行文件(二进制文件)中的测试用例
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CMake是一个跨平台的开源构建工具,可以用于自动生成各种编译环境和Makefile。它可以帮助开发者更方便地管理和构建项目。而GoogleTest是Google开发的一个C++测试框架,用于编写单元测试。 使用CMakeGoogleTest来进行单元测试的步骤如下: 1. 首先,在项目根目录下创建一个目录,例如gtest_test,并进入该目录。 2. 使用git命令下载GoogleTest的源代码,可以使用以下命令:`git clone -b release-1.11.0 https://github.com/google/googletest.git` 3. 在gtest_test目录下创建一个CMakeLists.txt文件,用于配置项目的构建参数和添加依赖。 4. 在CMakeLists.txt文件,使用`add_subdirectory(googletest)`命令将GoogleTest添加到项目。 5. 使用`add_library(mycode STATIC src/mycode.cpp src/mycode.h)`命令将待测源码编译成一个静态库。 6. 在test目录下创建一个CMakeLists.txt文件,并使用`add_subdirectory("src")`命令将test/src下的文件添加到项目。 7. 在test/src目录下创建一个CMakeLists.txt文件,并使用`add_subdirectory("util")`命令将test/src/util下的文件添加到项目。 8. 在工程根目录创建一个build文件夹,并进入该文件夹。 9. 使用`cmake ..`命令生成Makefile。 10. 使用`make`命令编译项目生成可执行文件。 11. 使用`./test/src/util/SrcUtilTest`命令执行编译好的二进制文件,执行当前目录下的所有单元测试用例。 以上是使用CMakeGoogleTest进行单元测试的一般步骤。你可以根据需要适配你的项目,具体的配置和使用方式可以参考官方文档和示例代码。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值