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:搜索测试可执行文件(二进制文件)中的测试用例
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值