Google Test
Google Test 和 Google Mock 是一对强大的单元测试工具:该框架是可移植的,包含丰富的致命和非致命断言,提供创建测试夹具和测试组的工具,提供信息丰富的消息,并以 XML 格式导出结果。 可能唯一的缺点是需要在您的项目中构建 gtest/gmock 才能使用它。
Google Test 基础
如果您不熟悉 Google Test,您可以在下方找到其主要概念的描述:
断言
在 Google Test 中,用于检查条件是否为真的语句被称为 断言。 非致命断言的名称中有 EXPECT_ 前缀,而导致致命失败并中止执行的断言的名称以 ASSERT_ 开头。 例如:
以下列出了 Google Test 中可用的一些断言(在此表中, ASSERT_ 作为示例,可以与 EXPECT_ 互换):
逻辑 |
|
通用比较 |
|
浮点比较 |
|
字符串比较 |
|
异常检查 |
|
此外,Google Test 支持 谓词断言 ,这有助于使输出消息更具信息性。 例如,您可以使用一个谓词函数来检查 a 和 b 的等价性并返回布尔结果,而不是使用 EXPECT_EQ(a, b)。 在失败的情况下,断言将打印函数参数的值:
谓词断言示例
bool IsEq(int a, int b){
if (a==b) return true;
else return false;
}
TEST(BasicChecks, TestEq) {
int a = 0;
int b = 1;
EXPECT_EQ(a, b);
EXPECT_PRED2(IsEq, a, b);
}
| 输出
Failure
Value of: b
Actual: 1
Expected: a
Which is: 0
Failure
IsEq(a, b) evaluates to false, where
a evaluates to 0
b evaluates to 1
|
在上面的 EXPECT_PRED2 中, predN 是一个具有 N 个参数的谓词函数。 Google Test 当前支持最多 5 个参数的谓词断言。
测试夹具
共享公共对象或子例程的 Google 测试可以分组到测试夹具中。 以下是一个通用测试夹具的示例:
当用于测试夹具时,应将 TEST() 宏替换为 TEST_F() ,以允许测试访问测试夹具的成员和函数:
有关 Google Test 的更多信息,请在框架的存储库中查看 示例。 此外,有关其他显著的 Google Test 功能(如 值参数化测试 和 类型参数化测试 )的更多信息,请参阅 高级选项。
将 Google Test 添加到您的项目中
从官方 存储库 下载 Google Test,并将 googletest-main 的内容解压到项目中的一个空文件夹中(例如, Google_tests/lib )。
或者,将 Google Test 克隆为 git 子模块 ,或 使用 CMake 下载 (以下说明在后一种情况下不适用)。
在 Google_tests 文件夹中创建一个 CMakeLists.txt 文件:在项目树中右键点击它,然后选择 。
自定义以下行并将其添加到您的脚本中:
# 'Google_test' is the subproject name project(Google_tests) # 'lib' is the folder with Google Test sources add_subdirectory(lib) include_directories(${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR}) # 'Google_Tests_run' is the target name # 'test1.cpp test2.cpp' are source files with tests add_executable(Google_Tests_run test1.cpp test2.cpp) target_link_libraries(Google_Tests_run gtest gtest_main)在您的 root CMakeLists.txt 脚本中,将
add_subdirectory(Google_tests)命令添加到末尾,然后重新加载项目。
编写测试时,请确保在每个包含测试代码的 .cpp 文件的开头添加 #include "gtest/gtest.h"。
为 Google Test 生成菜单
在包含 gtest 的文件中,您可以使用 生成 菜单 Alt+Insert 生成测试和测试夹具的代码。
从测试夹具调用时,此菜单还包括 SetUp 方法 和 TearDown 方法:

Google Test 运行/调试配置
尽管 Google Test 提供了 main() 条目,并且您可以像常规应用程序一样运行测试,但我们建议使用专用的 Google Test 运行/调试配置。 它包括与测试相关的设置,并让您受益于内置的 测试运行器 ,这在将测试作为常规程序运行时不可用。
要创建一个 Google Test 配置,请在主菜单中转到 运行 | 编辑配置 ,点击
并从模板列表中选择 Google Test。
指定要包含在配置中的测试或套件,或提供用于过滤测试名称的模式。 字段中提供了自动完成功能,可帮助您快速填写它们:

设置通配符以指定测试模式,例如:

在配置设置的其他字段中,您可以设置环境变量和命令行选项。 例如,使用 程序参数 字段传递
--gtest_repeat标志并多次运行 Google 测试:
输出将如下所示:
Repeating all tests (iteration 1) ... Repeating all tests (iteration 2) ... Repeating all tests (iteration 3) ...保存配置后,它就可以用于 运行
或 Debug
。
运行测试
在 CLion 中,有 多种方式 启动测试的运行/调试会话,其中一种是使用特殊的边栏图标。 这些图标有助于快速运行或调试单个测试或整个套件/测试夹具:

边栏图标还会显示测试结果(如果已可用):成功 或失败
。
当您使用边栏图标运行测试/套件/测试夹具时,CLion 会创建一个 临时 Google Test 配置,该配置在配置列表中显示为灰色。 要保存临时配置,请在 对话框中选择它并按 。

查看结果
当您运行测试时,结果(以及过程)会显示在测试运行器窗口中。 此窗口包括:
进度条 ,显示已执行测试的百分比,
树视图 ,显示所有正在运行的测试及其状态和持续时间,
测试的 output 流,
工具栏 ,提供重新运行失败的
测试、导出
或打开自动保存的先前结果
的选项,按字母顺序排序测试
以便轻松找到特定测试,或按持续时间排序
以了解哪个测试运行时间比其他测试更长。
测试树在测试逐一执行时显示所有测试。 对于参数化测试,您还将在树中看到参数。 此外,树中还包括禁用的测试(名称中带有 DISABLED 前缀的测试),并使用相应的图标将其标记为已跳过。

在运行时跳过测试
您可以根据运行时评估的条件配置某些测试被跳过。 为此,请使用 GTEST_SKIP() 宏。
将条件语句和 GTEST_SKIP() 宏添加到您想要跳过的测试中:
使用 显示被忽略的测试 图标在测试运行器树中查看/隐藏已跳过的测试:
