前一阵子在网上了解了CMockery测试模块,便决定自己去实测一下,其中过程有点小曲折,记录一下,也供大家参考:
环境:Ubuntu12.04
1、CMockery 下载:
在网站的资源绝大部分都是去google下载,良民一个,打不开网页。在其他地方找到了资源,并上传到本人的CSDN资源空间,可免费下载。
2、CMockery编译:
也是参照网上资源编译,可能是版本问题,发生错误。最后还是在CMockery Doc文档中找到了答案:
$ sudo apt-get -y install libtool make autoconf automake gcc
$ ./autogen.sh
$ ./configure
$ make
$ make
当然在configure时,我们可以加上自己的选项。
3、测试
也是采用网上的一个简单通用模块进行测试,中间小有插曲
代码如下:
/********math.c*********/
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
/********main.c*********/
#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <cmockery.h>
/* Ensure add() adds two integers correctly. */
void test_add(void **state) {
assert_int_equal(add(3, 3), 6);
assert_int_equal(add(3, -3), 0);
}
/* Ensure sub() subtracts two integers correctly.*/
void test_sub(void **state) {
assert_int_equal(sub(3, 3), 0);
assert_int_equal(sub(3, -3), 6);
}
int main(int argc, char *argv[])
{
const UnitTest tests[] = {
unit_test(test_add),
unit_test(test_sub),
};
return run_tests(tests);
}
编译:gcc -o main_test_run math.c main.c -I [安装头文件目录] -L [安装库目录] -lcmockery
[安装头文件目录]、[安装库目录]在你configure时指定,如果没有指定系统会默认安装到 /usr/include 和 /usr/lib 目录下,或者其他路径。
出现如下错误:
err1:
In file included from main.c:4:0:
/home/share/cmockery/Demo/include/cmockery/cmockery.h:19:40: fatal error: cmockery/cmockery_override.h: No such file or directory
way:
将你安装文件位置下的cmockery.h的20行,由 #include <cmockery/cmockery_override.h>
改为#include <cmockery_override.h>
err2:
/cmockery.h:402:1: error: unknown type name ‘uintmax_t’
way:
将你安装文件位置下的cmockery.h里,添加#include <stdint.h>
err3:
main.c:25:27: error: macro "run_tests" requires 2 arguments, but only 1 given
way:
在开发包里发现:
#define run_tests(tests, test_suite_name) _run_tests(tests, \
sizeof(tests) / sizeof(tests)[0], \
(test_suite_name))
修改main.c文件的return run_tests(tests)为return run_tests(tests, “run”);
重新编译ok,没问题。
导入CMockery库环境 export LD_LIBRARY_PATH=[安装库目录]:$LD_LIBRARY_PATH
$ ./main_test_run
[==========] Running 2 test(s).
[ RUN ] test_add
[ OK ] test_add
[ RUN ] test_sub
[ OK ] test_sub
[==========] 2 test(s) run.
[ PASSED ] 2 test(s).
[ FAILED ] 0 test(s).
[ REPORT ] Created run_xunit.xml report
终端显示了,测试结果。同样在当前文件下回生产run_xunit.xml文件,记录测试结果。文件如下