Skip to main content
Version: 1.1.1

特性

特点和设计目标

doctest 从一开始就被设计为尽可能轻量级非侵入性。应保留这些关键特征。

独立性 (transparent):

  • 通过定义 DOCTEST_CONFIG_DISABLE 标识符,可以从二进制可执行文件中删除所有与测试相关的内容
  • 非常小且易于集成 - 单头
  • 极低编译时间占用 - 大约 25ms 将标头包含在文件中的编译时间开销
  • 最快可能 断言宏 - 50k 断言可以在 30 秒内编译(甚至不到 10 秒)
  • 包含时不拖动任何标题(除了在实现库的翻译单元中)
  • 一切都在doctest命名空间中(实现细节位于嵌套的detail命名空间中)
  • 所有宏都有前缀 - 默认情况下有些宏也有无前缀版本,但这是可选的 - 请参阅 configuration
  • 即使使用最激进的标志,也有 0 个警告(在所有经过测试的编译器上!!!)
    • clang-Weverything -迂腐
    • -Wall -Wextra -pedantic>> 超过 35 个 << 其他警告 **未被 GCC 的这些标志覆盖! - 请参阅此处
    • MSVC/Wall
  • 无法识别的 命令行 选项不会出错,并支持与客户端命令行解析互操作的前缀
  • 可以设置选项 程序 并且不处理从命令行传递 argc/argv
  • 警告本身不会被禁用

极其便携

其中一些内容已经过时了

  • 符合标准的 C++11 代码 - 应该与任何具有 C++11 功能的编译器一起使用(使用标签 1.2.9 对于 C++98 及更早版本的编译器)
  • 测试通过 GCC: 4.8, 4.9, 5, 6, 7, 8, 9, 10, 11, 12
  • 测试通过 Clang: 3.5, 3.6, 3.7, 3.8, 3.9, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 (XCode 10+)
  • 测试通过 MSVC: 2015, 2017, 2019, 2022 (32位模式)
  • 每次提交测试 GitHub Actions
    • 即使在最激进的警告级别上,警告也会作为错误 - 请参阅此处
    • 在 CI 上进行静态分析 - Cppcheck / Clang-Tidy / Coverity Scan / OCLint / Visual Studio 分析器
    • 所有测试的输出都与之前已知的良好运行的参考输出进行比较
    • 调试/发布模式下构建和运行的所有测试
    • 所有测试都在 Linux 下通过 valgrind 运行(遗憾的是 不在 OSX 下
    • 所有测试均在 Linux/OSX 下通过 addressUBthread 消毒程序运行
    • 测试在 UNIX (Linux + OSX) 和 Windows 上的 300 多种不同配置中运行

其他特性

  • 真的很容易开始 - 它只是 1 个头文件 - 请参阅 tutorial
  • 非常轻、无干扰且便携 - 请参阅上面的部分 - 以及 基准
  • 提供了一种方法,使用 DOCTEST_CONFIG_DISABLE 宏从二进制文件中删除与测试相关的所有内容
  • 测试自动注册 - 无需手动将它们添加到集合中
  • Subcases - 共享测试用例的通用设置和拆卸代码的直观方法(替代 测试装置也受支持)
  • 模板化测试用例 - 按类型参数化
  • 支持 logging macros 来捕获局部变量和字符串 - 作为断言失败时的消息 - 具有惰性字符串化并且尽可能不进行分配!
  • 崩溃处理支持 - 使用 UNIX 信号和 Windows SEH
  • 线程安全 - 断言(和日志记录)可以从单个测试用例生成的多个线程中使用 - 示例
  • 可扩展的报告器系统(也可用于实现事件侦听器)
  • 所有平台上所有编译器的输出都是相同的 - 逐字节
  • 二进制文件(exe/dll)可以使用另一个二进制文件的测试运行程序 - 因此测试最终在单个注册表中 - 示例
  • 支持 BDD 风格 测试
  • 一个核心 断言宏 用于比较 - 标准 C++ 运算符用于比较(小于、等于、大于...) - 但完整的表达式被分解并左右记录表达式的值
  • 断言可以使用测试上下文之外 - 示例
  • 例外 的断言宏 - 如果某些东西应该或不应该抛出
  • 浮点比较支持 - 请参阅 Approx() 帮助器
  • 针对用户类型的 stringification 的强大机制 - 包括 exceptions
  • 测试可以分组在测试套件
  • 测试用例 decorators 例如 description / skip / may_fail / should_fail / expected_failures / 超时
  • 可以无异常和 rtti 使用 - 签出 DOCTEST_CONFIG_NO_EXCEPTIONS
  • 强大的命令行,有很多选项
  • 可以报告测试用例的持续时间
  • 测试可以使用通配符根据其名称/文件/测试套件进行过滤
  • 可以使用通配符并通过指定这些过滤器应工作的嵌套级别来filter子案例
  • 失败可以(可选)闯入 Windows 和 Mac 上的调试器
  • 与 Visual Studio 的输出窗口集成以应对失败的测试
  • 使用 OCTEST_CONFIG_IMPLMENT_WITH_MAIN 标识符实现库时可以提供 main()
  • 可以在标头中编写测试 - 它们仍然只会在可执行文件/共享对象中注册一次
  • 基于范围 在二进制文件中执行测试 - 请参阅示例 python 脚本
  • 扩展标头 用于不需要进入主 doctest.h 标头的额外功能
  • 控制台中的彩色输出
  • 控制测试执行的顺序
  • 不同的 doctest::Context 可以在程序的单次执行中创建和运行多次
  • 能够查询代码当前是否正在测试中运行 - doctest::is_running_in_test
  • tests can be registered in CTest with the use of doctest_discover_tests(<target>) from scripts/cmake/doctest.cmake

有一个计划中的功能列表,这些功能都很重要而且很大 - 请参阅路线图