CLion 2025.2 Help

Doctest

Doctest 是一个单头文件框架,具有自注册测试功能。 如其 文档中所述,Doctest 是在 Catch 的基础上设计的,并共享了部分 Catch 的代码——请参阅 Doctest 与 Catch 的区别

Doctest 不支持模拟 ,但您可以将其与第三方模拟库集成,例如 trompeloeilgooglemockFakeIt

Doctest 基础

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

示例测试

使用 Doctest 编写的简单测试如下所示:

// provides main(); this line is required in only one .cpp file #define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN #include "doctest.h" //function to be tested int fact(int n) { return n <= 1 ? n : fact(n - 1) * n; } TEST_CASE("testing the factorial function") { CHECK(fact(0) == 1); // should fail CHECK(fact(1) == 1); CHECK(fact(2) == 2); CHECK(fact(3) == 6); CHECK(fact(10) == 3628800); }

在上面的示例中, 测试阶乘函数 是一个自由格式的测试名称,不需要是唯一的。 CHECK 是 Doctest 的 断言宏 之一。

测试用例、子测试和套件

Doctest 提供了子用例机制,用于创建具有共享公共设置和清理的嵌套测试(不过,基于类的夹具也 支持)。

TEST_CASE("vectors can be sized and resized") { std::vector<int> v(5); REQUIRE(v.size() == 5); REQUIRE(v.capacity() >= 5); SUBCASE("adding to the vector increases its size") { v.push_back(1); CHECK(v.size() == 6); CHECK(v.capacity() >= 6); } SUBCASE("reserving increases just the capacity") { v.reserve(6); CHECK(v.size() == 5); CHECK(v.capacity() >= 6); } }

在上面的代码中, TEST_CASE() 会为每个 SUBCASE() 从头开始执行。 两个 REQUIRE 语句保证 size 为 5,且 capacity 在每个子用例的入口处至少为 5。 如果其中一个 CHECK() 失败,这意味着测试失败,但执行会继续。 在每次运行 TEST_CASE() 时,Doctest 执行一个子用例并跳过其他子用例。 下一次运行时,第二个子用例会被执行,依此类推。

类似于 Catch 的部分,子用例可以嵌套以创建检查操作的序列。 每个叶子子用例(内部没有嵌套子用例的子用例)只会执行一次。 当父子用例失败时,会阻止子子用例运行。

您可以使用 TEST_SUITE()TEST_SUITE_BEGIN()/TEST_SUITE_END() 宏将测试用例分组到套件中:

TEST_CASE("") {} // not part of any test suite TEST_SUITE("math") { TEST_CASE("") {} // part of the math test suite TEST_CASE("") {} // part of the math test suite } TEST_SUITE_BEGIN("utils"); TEST_CASE("") {} // part of the utils test suite TEST_SUITE_END(); TEST_CASE("") {} // not part of any test suite

Doctest 还支持 BDD 风格语法

在 CLion 中使用 Doctest

将 Doctest 添加到您的项目中

  1. 下载最新版本的 doctest.h 并将其复制到您的项目树中。

    最低支持的版本是 2.3.0。

  2. 在您的测试文件中包含头文件:

    #include "doctest.h"
  3. 在仅有的一个头文件中,在 #include 前加上 #define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN

    如果您需要提供自己的 main ,请参阅 这些说明

运行/调试自动创建的 Doctest 配置

CLion 会检测您项目中的 Doctest 测试并为其创建运行/调试配置。

  1. 您可以立即使用此配置运行或调试项目中的所有 Doctest 测试:

    自动创建的 Doctest 配置

添加新的 Doctest 运行/调试配置

  1. 转到 运行 | 编辑配置

  2. 点击 并从模板列表中选择 Doctest

    添加 Doctest 配置
  3. Doctest 配置设置
    • 名称 字段中设置配置名称。 此名称将显示在可用运行/调试配置的列表中。

    • 选择此选项以运行特定测试或套件。

      套件 字段中指定套件名称。 开始输入时,自动补全将建议可用的套件:

      套件名称的自动补全

      测试 字段中选择所需的测试。 将此字段留空以运行整个套件。

      从套件中选择测试

      选择此选项以指定单个测试或定义一组测试:

      • [#*filename.cpp] 运行 filename.cpp 中的所有测试,

      • [suite_name] 运行具有相应名称的套件,

      • [suite_name][test_name][suite_name][test_name][subtest_name] 运行给定套件中的特定测试,

      • 使用 [] ([][]) 引用匿名套件,但请确保添加测试名称。

      您可以在以逗号分隔的列表中指定多个模式,例如:

      Doctest 配置的模式

      或者,您可以将 套件测试 字段留空,并通过 程序参数 提供 Doctest 的 命令行标志

    • 目标 字段中,从列表中选择所需的目标。

  4. 点击 Apply 以保存配置。

  5. 在切换器中选择新创建的配置并运行 或调试

    运行/调试 Doctest 配置

运行测试

  • 在 CLion 中运行或调试测试的最快方法是使用边栏图标:

    测试的侧边栏图标

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

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

    保存临时测试配置

查看测试结果

当您运行测试时,CLion 会在内置的 测试运行窗口 中显示结果和过程。 测试树会显示所有测试,并逐一执行。 测试运行器窗口包括:

  • 带有已执行测试百分比的 进度条

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

  • 测试的输出流,

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

测试运行窗口
最后修改日期: 2025年 9月 26日