CLion 2025.2 Help

Google Test

Google TestGoogle Mock 是一对强大的单元测试工具:该框架是可移植的,包含丰富的致命和非致命断言,提供创建测试夹具和测试组的工具,提供信息丰富的消息,并以 XML 格式导出结果。 可能唯一的缺点是需要在您的项目中构建 gtest/gmock 才能使用它。

Google Test 基础

如果您不熟悉 Google Test,您可以在下方找到其主要概念的描述:

断言

在 Google Test 中,用于检查条件是否为真的语句被称为 断言。 非致命断言的名称中有 EXPECT_ 前缀,而导致致命失败并中止执行的断言的名称以 ASSERT_ 开头。 例如:

TEST (SquareTest /*test suite name*/, PosZeroNeg /*test name*/) { EXPECT_EQ (9.0, (3.0*2.0)); // fail, test continues ASSERT_EQ (0.0, (0.0)); // success ASSERT_EQ (9, (3)*(-3.0)); // fail, test interrupts ASSERT_EQ (-9, (-3)*(-3.0));// not executed due to the previous assert }

以下列出了 Google Test 中可用的一些断言(在此表中, ASSERT_ 作为示例,可以与 EXPECT_ 互换):

逻辑

ASSERT_TRUE(condition)

ASSERT_FALSE(condition)

通用比较

ASSERT_EQ(expected, actual) / ASSERT_NE(val1, val2)

ASSERT_LT(val1, val2) / ASSERT_LE(val1, val2)

ASSERT_GT(val1, val2) / ASSERT_GE(val1, val2)

浮点比较

ASSERT_FLOAT_EQ(expected, actual)

ASSERT_DOUBLE_EQ(expected, actual)

ASSERT_NEAR(val1, val2, abs_error)

字符串比较

ASSERT_STREQ(expected_str, actual_str) / ASSERT_STRNE(str1, str2)

ASSERT_STRCASEEQ(expected_str, actual_str) / ASSERT_STRCASENE(str1, str2)

异常检查

ASSERT_THROW(statement, exception_type)

ASSERT_ANY_THROW(statement)

ASSERT_NO_THROW(statement)

此外,Google Test 支持 谓词断言 ,这有助于使输出消息更具信息性。 例如,您可以使用一个谓词函数来检查 ab 的等价性并返回布尔结果,而不是使用 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 测试可以分组到测试夹具中。 以下是一个通用测试夹具的示例:

class myTestFixture: public ::testing::test { public: myTestFixture( ) { // initialization; // can also be done in SetUp() } void SetUp( ) { // initialization or some code to run before each test } void TearDown( ) { // code to run after each test; // can be used instead of a destructor, // but exceptions can be handled in this function only } ~myTestFixture( ) { //resources cleanup, no exceptions allowed } // shared user data };

当用于测试夹具时,应将 TEST() 宏替换为 TEST_F() ,以允许测试访问测试夹具的成员和函数:

TEST_F( myTestFixture, TestName) {/*...*/}

有关 Google Test 的更多信息,请在框架的存储库中查看 示例。 此外,有关其他显著的 Google Test 功能(如 值参数化测试类型参数化测试 )的更多信息,请参阅 高级选项

将 Google Test 添加到您的项目中

  1. 从官方 存储库 下载 Google Test,并将 googletest-main 的内容解压到项目中的一个空文件夹中(例如, Google_tests/lib )。

    或者,将 Google Test 克隆为 git 子模块 ,或 使用 CMake 下载 (以下说明在后一种情况下不适用)。

  2. Google_tests 文件夹中创建一个 CMakeLists.txt 文件:在项目树中右键点击它,然后选择 新建 | 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)
  3. 在您的 root CMakeLists.txt 脚本中,将 add_subdirectory(Google_tests) 命令添加到末尾,然后重新加载项目。

编写测试时,请确保在每个包含测试代码的 .cpp 文件的开头添加 #include "gtest/gtest.h"

为 Google Test 生成菜单

在包含 gtest 的文件中,您可以使用 生成 菜单 Alt+Insert 生成测试和测试夹具的代码。

从测试夹具调用时,此菜单还包括 SetUp 方法TearDown 方法

Google 测试的生成菜单

Google Test 运行/调试配置

尽管 Google Test 提供了 main() 条目,并且您可以像常规应用程序一样运行测试,但我们建议使用专用的 Google Test 运行/调试配置。 它包括与测试相关的设置,并让您受益于内置的 测试运行器 ,这在将测试作为常规程序运行时不可用。

  1. 要创建一个 Google Test 配置,请在主菜单中转到 运行 | 编辑配置 ,点击 并从模板列表中选择 Google Test

  2. 指定要包含在配置中的测试或套件,或提供用于过滤测试名称的模式。 字段中提供了自动完成功能,可帮助您快速填写它们:

    配置字段中的自动补全

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

    测试模式
  3. 在配置设置的其他字段中,您可以设置环境变量和命令行选项。 例如,使用 程序参数 字段传递 --gtest_repeat 标志并多次运行 Google 测试:

    程序参数中的测试标志

    输出将如下所示:

    Repeating all tests (iteration 1) ... Repeating all tests (iteration 2) ... Repeating all tests (iteration 3) ...
  4. 保存配置后,它就可以用于 运行 Debug

运行测试

在 CLion 中,有 多种方式 启动测试的运行/调试会话,其中一种是使用特殊的边栏图标。 这些图标有助于快速运行或调试单个测试或整个套件/测试夹具:

测试的侧边栏图标

边栏图标还会显示测试结果(如果已可用):成功 或失败

当您使用边栏图标运行测试/套件/测试夹具时,CLion 会创建一个 临时 Google Test 配置,该配置在配置列表中显示为灰色。 要保存临时配置,请在 编辑配置 对话框中选择它并按

保存临时测试配置

查看结果

当您运行测试时,结果(以及过程)会显示在测试运行器窗口中。 此窗口包括:

  • 进度条 ,显示已执行测试的百分比,

  • 树视图 ,显示所有正在运行的测试及其状态和持续时间,

  • 测试的 output 流,

  • 工具栏 ,提供重新运行失败的 测试、导出 或打开自动保存的先前结果 的选项,按字母顺序排序测试 以便轻松找到特定测试,或按持续时间排序 以了解哪个测试运行时间比其他测试更长。

测试树在测试逐一执行时显示所有测试。 对于参数化测试,您还将在树中看到参数。 此外,树中还包括禁用的测试(名称中带有 DISABLED 前缀的测试),并使用相应的图标将其标记为已跳过。

Google 测试的测试运行器

在运行时跳过测试

您可以根据运行时评估的条件配置某些测试被跳过。 为此,请使用 GTEST_SKIP() 宏。

将条件语句和 GTEST_SKIP() 宏添加到您想要跳过的测试中:

TEST(Foo, Bar) { //... if (condition) GTEST_SKIP_("message"); // or GTEST_SKIP() with no message //... }

使用 显示被忽略的测试 图标在测试运行器树中查看/隐藏已跳过的测试:

测试运行器选项卡中的已跳过测试
最后修改日期: 2025年 9月 26日