FindGTest¶
查找 GoogleTest,Google C++ 测试和模拟框架。
find_package(GTest [...])
GoogleTest 框架还包含 GoogleMock,一个用于编写和使用 C++ 模拟类的库。在某些系统上,GoogleMock 可能作为独立包分发。
当 GoogleTest 和 GoogleMock 库的调试和发布(优化)版本都可用时,此模块会根据当前的 构建配置 选择相应的版本。
版本 3.20 中新增: 如果 GoogleTest 使用其基于 CMake 的构建系统进行构建和安装,它会提供一个 包配置文件(GTestConfig.cmake),该文件可与 find_package() 在 Config 模式下使用。默认情况下,此模块现在会搜索该配置文件,如果找到,则无需进一步操作即可返回结果。如果未找到上游配置文件,此模块将回退到 Module 模式 并搜索标准位置。
导入的目标¶
此模块提供以下 导入目标
GTest::gtest在 3.20 版本中添加。
封装 GoogleTest
gtest库使用需求的 Target,如果找到 GoogleTest 则可用。gtest库提供核心的 GoogleTest 测试框架功能。GTest::gtest_main在 3.20 版本中添加。
封装 GoogleTest
gtest_main库使用需求的 Target,如果找到 GoogleTest 则可用。gtest_main库提供了一个main()函数,允许在不手动定义的情况下运行测试。仅当 GoogleTest 应为可执行文件提供
main()函数时,才链接到GTest::gtest_main。如果项目正在提供自己的main()实现,则仅链接到GTest::gtest。GTest::gmock在版本 3.23 中添加。
封装 GoogleMock
gmock库使用需求的 Target,如果找到 GoogleTest 及其 Mock 库则可用。gmock库提供用于在 C++ 中编写和使用模拟类的设施。GTest::gmock_main在版本 3.23 中添加。
封装 GoogleMock
gmock_main库使用需求的 Target,如果找到 GoogleTest 和gmock_main则可用。gmock_main库提供了一个main()函数,允许在不手动定义的情况下运行 GoogleMock 测试。仅当 GoogleTest 应为可执行文件提供
main()函数时,才链接到GTest::gmock_main。如果项目正在提供自己的main()实现,则仅链接到GTest::gmock。
结果变量¶
此模块定义了以下变量
GTest_FOUND3.3 版本中新增。
指示是否找到 GoogleTest 的布尔值。
提示¶
此模块在调用 find_package(GTest) 之前接受以下变量:
GTEST_ROOTGoogleTest 安装的根目录(也可以设置为环境变量)。此变量仅在 GoogleTest 以 Module 模式 找到时使用。
GTEST_MSVC_SEARCH使用 MSVC 编译时,此变量根据运行时库链接模型控制搜索哪个 GoogleTest 构建变体。此变量仅在 GoogleTest 以 Module 模式 找到时使用,并接受以下值之一:
MD(默认)搜索与动态 C 运行时链接的 GoogleTest 的共享库变体。这些库通常使用 MSVC 运行时标志
/MD或/MDd(分别为 Release 或 Debug)进行编译。MT搜索与静态 C 运行时链接的 GoogleTest 的静态库变体。这些库通常使用 MSVC 运行时标志
/MT或/MTd进行编译。
已弃用的项¶
已弃用变量¶
以下变量提供用于向后兼容性
GTEST_INCLUDE_DIRS版本 4.1 中已弃用: 请改用
GTest::gtest导入的目标,它通过其INTERFACE_INCLUDE_DIRECTORIES目标属性公开了所需的包含目录。提供包含 GoogleTest 所需头文件的结果变量。仅当 GoogleTest 以 Module 模式 找到时,此变量才保证可用。
GTEST_LIBRARIES版本 4.1 中已弃用: 请改用
GTest::gtest导入的目标。提供链接以使用 GoogleTest
gtest库所需库的结果变量。请注意,除了此变量指定的库之外,项目还负责链接适当的线程库。GTEST_MAIN_LIBRARIES版本 4.1 中已弃用: 请改用
GTest::gtest_main导入的目标。提供链接以使用 GoogleTest
gtest_main库所需库的结果变量。GTEST_BOTH_LIBRARIES版本 4.1 中已弃用: 请改用
GTest::gtest和GTest::gtest_main导入的目标。提供合并的
gtest和gtest_main库的结果变量。GTEST_FOUND版本 4.2 中已弃用: 请使用
GTest_FOUND,其值相同。指示是否找到 GoogleTest 的布尔值。
已弃用的导入的目标¶
为向后兼容,此模块还提供了以下导入的目标(自 CMake 3.5 起可用):
GTest::GTest版本 3.20 中已弃用: 请改用
GTest::gtest导入的目标。链接
GTest::gtest库的导入目标。GTest::Main版本 3.20 中已弃用: 请改用
GTest::gtest_main导入的目标。链接
GTest::gtest_main库的导入目标。
示例¶
示例:查找 GoogleTest¶
查找 GoogleTest
find_package(GoogleTest)
或者,查找 GoogleTest 并将其设为必需(如果未找到,处理将停止并显示错误消息)
find_package(GoogleTest REQUIRED)
示例:使用导入的目标¶
在以下示例中,GTest::gtest 导入的目标链接到项目目标,这使得可以使用核心 GoogleTest 测试框架。
find_package(GTest REQUIRED)
target_link_libraries(foo PRIVATE GTest::gtest)
在下一个示例中,GTest::gtest_main 导入的目标也链接到可执行文件,并且注册了一个测试。 GTest::gtest_main 库提供了一个 main() 函数,因此无需手动编写。GTest::gtest 库仍然被链接,因为测试代码直接使用了 GTest::gtest 提供的功能,并且最佳实践是直接链接到直接使用的库。
enable_testing()
find_package(GTest REQUIRED)
add_executable(foo foo.cc)
target_link_libraries(foo PRIVATE GTest::gtest GTest::gtest_main)
add_test(NAME AllTestsInFoo COMMAND foo)
与 CTest 的更深层集成¶
此模块通常与 GoogleTest 模块一起使用,该模块提供了 gtest_discover_tests() 和 gtest_add_tests() 命令,以帮助将 GoogleTest 基础架构与 CTest 集成。
find_package(GTest)
target_link_libraries(example PRIVATE GTest::gtest GTest::gtest_main)
include(GoogleTest)
gtest_discover_tests(example)
# ...
版本 3.9 中已更改: 之前的 CMake 版本在此模块中定义了 gtest_add_tests() 命令。