项目简介
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 contains
main`. */
- 在测试文件中包含
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】