项目简介
EZTest是一款专为Linux系统下的C/C++项目打造的轻量级单元测试框架。它以单个头文件 eztest.h 的形式提供,使用便捷,且API与GoogleTest高度相似,部分项目中可直接替换使用。其核心优势在于能直接配合 -fsanitizer=memory 使用,无需像GoogleTest那样重新构建库。
项目的主要特性和功能
- 独立头文件,无需额外链接和编译步骤,方便集成到各类项目。
- 支持与
-fsanitizer=memory配合使用,简化内存检测工作。 - 采用进程隔离,每个测试作为独立进程运行,避免测试间相互干扰。
- API与GoogleTest大部分匹配,降低学习成本。
- 提供丰富的编译和行为切换选项,可自定义行为。
- 测试不链接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)
使用
- 命名空间:
eztest.h中定义的所有符号和宏都以eztest或EZTEST为前缀,C++ 中所有符号都在eztest::命名空间内,可避免符号冲突。 - 运行测试:
- 在测试文件中包含
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_PRECISION、EZTEST_FLOAT_ULP_PRECISION 等。
- 编译切换:如 EZTEST_DISABLE_WARNINGS、EZTEST_STRICT_NAMESPACE 等。
系统要求
- 操作系统:目前仅测试了 Linux 系统,Unix 系统可能也适用。
- 编译器:目前仅测试了 GCC 和 Clang 编译器。
- 语言:C 需 C99 及以上且支持
__attribute__((constructor));C++ 需 C++11 及以上。 - 架构:不使用
posix规范编译时,支持x86-64、x86-32、arm、aarch64、riscv64、riscv32等架构;使用时任何目标架构都可能适用。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】