简介
Cmockery是Google发布的用于C单元测试的一个轻量级的框架。它很小巧,对其他 开源 包没有依赖,对被测试代码侵入性小。
编译和测试方式
1.选择操作环境
本文选用华为鲲鹏 云服务 ECS KC1实例做测试
2.获取源代码
https://github.com/google/cmockery/releases提供Cmockery各版本的源码压缩包,可以直接下载。
3.编译源代码
本文以“cmockery-0.1.2”版本为例,下载源码,并编译安装。
1)下载Cmockery源码。
cd
wget https://codeload.github.com/google/cmockery/tar.gz/v0.1.2
2)解压Cmockery源码。
tar -zxvf v0.1.2
3)编译安装Cmockery。
cd cmockery-0.1.2
./configure --build=aarch64-unknown-linux-gnu
make
make install
4.测试已完成编译的软件
步骤一:设置环境变量
1)编辑“/etc/profile”文件,添加环境变量。
a.添加“LD_LIBRARY_PATH”环境变量。
vi /etc/profile
修改内容如下:
export LD_LIBRARY_PATH=/usr/local/lib
b.使环境变量生效。
source /etc/profile
2)查看“LD_LIBRARY_PATH”环境变量是否修改生效。
echo $LD_LIBRARY_PATH
回显内容如下:
/usr/local/lib
步骤二:测试Cmockery
1)新建一个文件夹用于Cmockery单元测试。
cd /root/cmockery-0.1.2
mkdir math_demo
2)进入“math_demo”,创建“math.c”源文件,用于待测代码模块。
cd math_demo
vi math.c
将下面内容复制到“math.c”文件中。
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
3)进入“math_demo”,创建“test_math.c”源文件,用于测试用例和main函数模块。
cd math_demo
vi test_math.c
将下面内容复制到“test_math.c”文件中。
#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <google/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);
}
4)编译源文件。
gcc math.c test_math.c -lcmockery
编译完成后,“math_demo”文件夹下会生成“a.out”文件。
5)运行程序,查看单元测试是否顺利执行。
./a.out
回显信息如下,则表示Cmockery安装成功且可以正常运行。
test_add: Starting test
test_add: Test completed successfully.
test_sub: Starting test
test_sub: Test completed successfully.
All 2 tests passed
已知问题
问题描述:
5)中,执行 ./out命令时,提示无法加载“libcmockery.so.0”的错误,如下:
./a.out: error while loading shared libraries: libcmockery.so.0: cannot open shared object file: No such file or directory
问题原因:缺少“LD_LIBRARY_PATH”环境变量配置。
解决方法:请参见步骤一:设置环境变量设置“LD_LIBRARY_PATH”环境变量,确保环境变量生效后,再重新执行步骤二:测试Cmockery。