greatestC 单元测试工具
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或更高版本的语言标准进行编译,则用于参数测试(使用参数运行测试)的语法会稍微好一些。
一篇博客文章, 提供了更多信息。虽然已有数年的历史,但主要功能仍是准确的。
评论