簡(jiǎn)介
Cmockery是Google發(fā)布的用于C單元測(cè)試的一個(gè)輕量級(jí)的框架。它很小巧,對(duì)其他開源包沒有依賴,對(duì)被測(cè)試代碼侵入性小。
編譯和測(cè)試方式
1.選擇操作環(huán)境
本文選用華為鯤鵬云服務(wù)ECS KC1實(shí)例做測(cè)試
2.獲取源代碼
https://github.com/google/cmockery/releases提供Cmockery各版本的源碼壓縮包,可以直接下載。
3.編譯源代碼
本文以“cmockery-0.1.2”版本為例,下載源碼,并編譯安裝。
1)下載Cmockery源碼。
cdwget 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-gnumakemake install
4.測(cè)試已完成編譯的軟件
步驟一:設(shè)置環(huán)境變量
1)編輯“/etc/profile”文件,添加環(huán)境變量。
a.添加“LD_LIBRARY_PATH”環(huán)境變量。
vi /etc/profile
修改內(nèi)容如下:
export LD_LIBRARY_PATH=/usr/local/lib
b.使環(huán)境變量生效。
source /etc/profile
2)查看“LD_LIBRARY_PATH”環(huán)境變量是否修改生效。
echo $LD_LIBRARY_PATH
回顯內(nèi)容如下:
/usr/local/lib
步驟二:測(cè)試Cmockery
1)新建一個(gè)文件夾用于Cmockery單元測(cè)試。
cd /root/cmockery-0.1.2mkdir math_demo
2)進(jìn)入“math_demo”,創(chuàng)建“math.c”源文件,用于待測(cè)代碼模塊。
cd math_demovi math.c
將下面內(nèi)容復(fù)制到“math.c”文件中。
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
3)進(jìn)入“math_demo”,創(chuàng)建“test_math.c”源文件,用于測(cè)試用例和main函數(shù)模塊。
cd math_demovi test_math.c
將下面內(nèi)容復(fù)制到“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”文件夾下會(huì)生成“a.out”文件。
5)運(yùn)行程序,查看單元測(cè)試是否順利執(zhí)行。
./a.out
回顯信息如下,則表示Cmockery安裝成功且可以正常運(yùn)行。
test_add: Starting test
test_add: Test completed successfully.
test_sub: Starting test
test_sub: Test completed successfully.
All 2 tests passed
已知問題
問題描述:
5)中,執(zhí)行 ./out命令時(shí),提示無法加載“libcmockery.so.0”的錯(cuò)誤,如下:
./a.out: error while loading shared libraries: libcmockery.so.0: cannot open shared object file: No such file or directory
問題原因:缺少“LD_LIBRARY_PATH”環(huán)境變量配置。
解決方法:請(qǐng)參見步驟一:設(shè)置環(huán)境變量設(shè)置“LD_LIBRARY_PATH”環(huán)境變量,確保環(huán)境變量生效后,再重新執(zhí)行步驟二:測(cè)試Cmockery。