greatestC 单元测试工具

联合创作 · 2023-10-01 15:20

greatest 是一个 C 语言的单元测试系统,只需要一个文件支持。示例代码:

$ cat simple.c
#include "greatest.h"

TEST x_should_equal_1() {
    int x = 1;
    ASSERT_EQ(1, x);                              /* default message */
    ASSERT_EQm("yikes, x doesn't equal 1", 1, x); /* custom message */
    PASS();
}

SUITE(the_suite) {
    RUN_TEST(x_should_equal_1);
}

/* Add definitions that need to be in the test runner's main file. */
GREATEST_MAIN_DEFS();

int main(int argc, char **argv) {
    GREATEST_MAIN_BEGIN();      /* command-line arguments, initialization. */
    RUN_SUITE(the_suite);
    GREATEST_MAIN_END();        /* display results */
}
$ make simple && ./simple
cc -g -Wall -Werror -pedantic    simple.c   -o simple

* Suite the_suite:
.
1 tests - 1 pass, 0 fail, 0 skipped (5 ticks, 0.000 sec)

Total: 1 tests (47 ticks, 0.000 sec)
Pass: 1, fail: 0, skip: 0.

主要特点

  • 小巧,轻便

    除了ANSI C89以外,最大的功能不依赖任何内容,并且使用编译时,测试脚手架应该在没有警告的情况下构建 -Wall -Wextra -pedantic。它低于1,000 LOC(SLOCCount),并且没有动态分配。

  • 许可许可

    最大的是根据ISC许可证发布的。您可以自由使用它,甚至可以用于商业目的。

  • 易于设置

    要使用,仅#include "greatest.h"在您的项目中。样板非常少。大多数功能是可选的。

  • 不自以为是

    当命令行测试运行器有用时,Greatest可以提供一个,但是它也可以作为其他程序的一部分运行。它不依赖于特定的构建系统或其他工具,而应适应各种测试方法。它积极避免在测试代码上施加体系结构选择。尽管在设计C时考虑到C语言是最伟大的,但是它试图从C ++中使用。

  • 模块化的

    测试可以单独运行,也可以分组进行。套件可以共享通用设置,并且可以位于不同的编译单元中。

  • 低摩擦

    可以按名称运行特定的测试或套件,以在开发过程中进行集中且快速的迭代。最大的好处是几乎没有启动延迟。

有一些编译时选项,如果使用C99或更高版本的语言标准进行编译,则用于参数测试(使用参数运行测试)的语法会稍微好一些。

 一篇博客文章, 提供了更多信息。虽然已有数年的历史,但主要功能仍是准确的。

盗窃案(一个相关项目)增加了基于属性的测试

浏览 8
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报