littlebot
Published on 2025-04-08 / 0 Visits
0

【源码】基于CC++语言的EZTest单元测试框架

项目简介

EZTest是一款专为Linux系统下的C/C++项目打造的轻量级单元测试框架。它以单个头文件 eztest.h 的形式提供,使用便捷,且API与GoogleTest高度相似,部分项目中可直接替换使用。其核心优势在于能直接配合 -fsanitizer=memory 使用,无需像GoogleTest那样重新构建库。

项目的主要特性和功能

  1. 独立头文件,无需额外链接和编译步骤,方便集成到各类项目。
  2. 支持与 -fsanitizer=memory 配合使用,简化内存检测工作。
  3. 采用进程隔离,每个测试作为独立进程运行,避免测试间相互干扰。
  4. API与GoogleTest大部分匹配,降低学习成本。
  5. 提供丰富的编译和行为切换选项,可自定义行为。
  6. 测试不链接C++运行时库,减少对外部库的依赖。

安装使用步骤

安装

使用CMake安装

在复制的项目文件夹中执行以下命令: sh mkdir build && cd build cmake .. # 可使用 -DCMAKE_INSTALL_PREFIX=<your_path> 指定安装路径 cmake --build . --target install 在你的CMake项目中添加以下代码使用安装好的库: cmake find_package(eztest REQUIRED) target_link_libraries(your_test_target eztest::eztest)

作为子模块安装

在你的CMake项目中添加以下代码: cmake add_subdirectory(path/to/your/cloned/eztest) target_link_libraries(your_test_target eztest)

高级安装

安装时可设置一些选项来修改 eztest.h 的生成方式,例如: cmake option( EZTEST_ULP_PRECISION "Int: Set float/double compare ULP bound" OFF) option( EZTEST_FLOAT_ULP_PRECISION "Int: Set float compare ULP bound" OFF) option( EZTEST_DOUBLE_ULP_PRECISION "Int: Set double compare ULP bound" OFF) option( EZTEST_DISABLE_WARNINGS "Bool: Set/unset to configure whether warnings are supressed with pragmas" OFF) option( EZTEST_DISABLE_LINTS "Bool: Set/unset to configure whether lints are supressed with comments" OFF) option( EZTEST_STRICT_NAMESPACE "Bool: Set/unset to configure whether generic TEST/ASSERT/EXPECT macros are defined" OFF)

使用

  1. 命名空间:eztest.h 中定义的所有符号和宏都以 eztestEZTEST 为前缀,C++ 中所有符号都在 eztest:: 命名空间内,可避免符号冲突。
  2. 运行测试:
    • 在测试文件中包含 eztest.h
    • 构建测试可执行文件。
    • 运行生成的可执行文件。 示例代码: ``C /* eztest.h containsmain`. */

include "eztest/eztest.h"

TEST(foo, bar) { ASSERT_EQ(0, 0); } 编译并运行测试:sh clang++ test.cc -O3 -o test ./test `` 3. 测试设置:使用TEST(suite, name)TEST_TIMED(suite, name, timeout_in_milliseconds)宏创建测试。 4. 断言和期望:提供多种断言和期望语句,如{ASSERT|EXPECT}TRUE{ASSERT|EXPECT}_EQ等,用于不同类型的检查。 5. 失败打印:在 C++ 或支持typeof扩展的 C11 及以上编译器中,失败信息会打印变量;也可在断言或期望宏中添加额外的printf参数,仅在失败时打印。 6. 禁用测试:在测试名称前加DISABLED` 可禁用测试。

高级用法和切换

可通过定义宏来改变 eztest.h 的行为和编译方式: - 行为切换:如 EZTEST_ULP_PRECISIONEZTEST_FLOAT_ULP_PRECISION 等。 - 编译切换:如 EZTEST_DISABLE_WARNINGSEZTEST_STRICT_NAMESPACE 等。

系统要求

  • 操作系统:目前仅测试了 Linux 系统,Unix 系统可能也适用。
  • 编译器:目前仅测试了 GCC 和 Clang 编译器。
  • 语言:C 需 C99 及以上且支持 __attribute__((constructor));C++ 需 C++11 及以上。
  • 架构:不使用 posix 规范编译时,支持 x86-64x86-32armaarch64riscv64riscv32 等架构;使用时任何目标架构都可能适用。

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】