C语言单元测试工具check

    xiaoxiao2022-07-02  122

    C语言单元测试工具check

    实例

    关于check的概念性描述,我在这里就不多少了,主要就是分享一下我在学习使用了check后的一些问题。

    安装完check(我是在github上下载的源码安装的),在你的 /usr/local/ 目录下会有check的头文件(check.h)静态库文件,动态库文件等相关文件。在使用check的时候就可以用check.h头文件了,和生成的库文件了。使用的时候就是这样的结果。

    实例

    这个就是整个实例的目录 test------生成的可执行文件 readme--------自己写的说明性文件,方便以后看 add目录下-------两个被测试函数 include目录 -------头文件 unit_test/test_fun.c -----自己写的测试文件,用来测试被测试的函数是否‘正确’ unit_test/test_main.c-----主要就是main函数,调用test_fun.c 中的函数,生成test文件。

    add1.文件

    #include <stdio.h> int add(int a, int b)//求两个数的和 { return a + b + 1;//故意写错函数,为了测试 }

    sub1.文件

    因为这个文件没有用到stdio.o下的函数所以没加头文件,上一个也没用到。。

    int sub(int a, int b) { return a - b + 1; }

    add.h文件

    #ifndef ADD_H #define ADD_H int add(int a, int b); #endif

    sub.h文件

    #ifndef SUB_H #define SUB_H int sub(int a, int b); #endif

    unit_test.h文件

    #include "check.h" #ifndef UNIT_TEST_H #define UNIT_TEST_H Suite *make_unit_suite(void); //这个函数在头文件check.h中声明 #endif

    test_fun.c文件

    下面的那些函数都是在check.h中声明的,你可以在/usr/local/include/check.h中查看。(你下载的源码解压之后里面也是有的)。建议看。

    #include "check.h" #include "../include/add.h" #include "../include/sub.h" //头文件相对路径 START_TEST(aaa) { fail_unless(add(1, 4) == 5, "error, add(1, 4) != 5over"); //如果add(1, 4) == 5的话,就成功,否则输出后面的字符串。 } END_TEST START_TEST(bbb) { fail_unless(sub(4, 2) == 2, "error, sub(4, 2) != 2over"); } END_TEST Suite *make_unit_suite(void) { Suite *s = suite_create("bao1"); //创建一个名为bao1的 Suite TCase *tc_bao = tcase_create("bao2"); //创建一个名为bao2的a test case(Tcase) suite_add_tcase(s, tc_bao); //将a test case添加到Tcase(bao1)中 tcase_add_test(tc_bao, aaa); //将a test funtion (aaa) 添加到 a test case(bao2)中 tcase_add_test(tc_bao, bbb); return s; //返回一个Suite的地址。 }

    test_fun.c文件

    SRunner------也就是 a suite runner 这里大体上就是main 函数调用你在test_fun.c文件中的函数然后运行。

    #include <stdio.h> #include <stdlib.h> #include "../include/unit_test.h" int main(int argc, const char *argv[]) { int n = 0; SRunner *sr = NULL; sr = srunner_create(make_unit_suite()); srunner_run_all(sr, CK_NORMAL); n = srunner_ntests_failed(sr); srunner_free(sr); return (n == 0) ? EXIT_SUCCESS : EXIT_FAILURE; }

    makefile文件

    这个个文件,建议不要复制,我就是复制网上的然后就是报错, 错因就是tab键, 运行命令前面必须只有一个tab键。

    vpath %.h include vpath %.c add vpath %.c unit_test objects = add1.o sub1.o test_fun.o test:test_main.c $(objects) gcc -Iinclude $^ -o $@ -lcheck all:$(objects) $(objects): %.o : %.c gcc -c -Iinclude $< -o $@ .PHONY:clean clean: rm *.o

    readme 文件 欢迎关注公众号:

    最新回复(0)