cmocka在使用之前需要引入四个头文件
#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <stdint.h>
基本的测试框架如下所示:
#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <stdint.h>
// 在 #include <cmocka.h> 之前,必须先 #include 上面四个头文件,这是官网 The CMocka API 中明确要求的,在 cmocka.h 头文件开头部分也有注明。
#include <cmocka.h>
/* null_test_success 函数是测试用例: 什么也没有做,而且成功返回了*/
static void null_test_success(void **state) {
(void) state; /* unused */
int a = 0;
assert_true(a == 1);
//printf("test\n");
}
int main(void) {
// CMUnitTest 结构体是测试用例集(可以包含多个测试用例),每个测试用例可以设定可选的 startup 和 teardown 函数,用于负责执行测试前的初始化和测试后的销毁工作
const struct CMUnitTest tests[] = {
// 用了 cmocka_unit_test 宏来填充 CMUnitTest 结构体中的测试用例( startup 和 teardown 为 NULL)
cmocka_unit_test(null_test_success),
};
// cmocka_run_group_tests 函数用于启动测试并展示测试结果,可以为测试集指定全局的 startup 和 teardown(示例中都是NULL)。
return cmocka_run_group_tests(tests, NULL, NULL);
}
c语言的编译方式:
需要安装cmocka库
gcc -o test_unit test_unit.c -lcmocka
./test_unit
运行结果如下:
[==========] Running 1 test(s).
[ RUN ] null_test_success
[ ERROR ] --- a == 1
[ LINE ] --- test_unit.c:13: error: Failure!
[ FAILED ] null_test_success
[==========] 1 test(s) run.
[ PASSED ] 0 test(s).
[ FAILED ] 1 test(s), listed below:
[ FAILED ] null_test_success
1 FAILED TEST(S)
解释一下结果:
1, 构建一个测试函数null_test_success,其中使用到断言函数assert_true
由结果可以看出来: 在断言函数中我用到了一个伪命题a == 1,这是不成立的。所以从结果反馈出来有一个测试失败
网友评论