|
|
|
|
CUnit整理 |
|
|
|
|
一、简介:
CUnit是一个用C语言写的单元测试库,它是一个简单的测试框架,提供了丰富的断言语句来测试常用的数据类型,此外,对于跑测试用例和反馈测试结果,CUnit都有一些不同的接口,它可以编译成动态库或者静态库。
二、安装使用
1.准备工具:
首先要安装mingw和msys,下载地址:点击打开链接
注意只需选择Basic Setup安装即可,如下图:
安装完成后要设置环境变量,把安装目录的bin文件目录加入到path里面即可,如下图:
设置好环境变量,可以去cmd控制台看一下是否生效,测试指令为gcc -v。
2.编译方法:
去msys的安装目录里面打开msys.bat文件,如:D:\MINGW\msys\1.0\msys.bat。
通过CD指令指向CUnit的项目路径,如:CD D:\CUnit-2.1-3。
然后依次执行以下指令即可编译完成。
libtoolize
automake --add-missing
autoreconf
./configure --prefix=/mingw
make
make install |
三、基本框架
CUnit是一个可以跨平台的框架。它只有一个Test Registry, 一次测试(Test Registry)可以运行多个测试包(Test Suite),而每个测试包可以包括多个测试用例(Test Case),每个测试用例又包含一个或者多个断言类的语句。如下图所示
四、基本流程
1)准备好你要测试的函数
2)初始化test注册函数:CU_initialize_registry()
3)添加测试包:CU_add_suite()
4)添加测试用例:CU_add_test()
5)运行测试用例:比如,CU_console_run_tests
6)清除test注册资源:CU_cleanup_registry
五、测试函数说明(下面CUnit自带的说明)
int
maxi(int i1, int i2)
{
return (i1 > i2) ? i1 : i2;
}
void test_maxi(void)
{
CU_ASSERT(maxi(0,2) == 2);
CU_ASSERT(maxi(0,-2) == 0);
CU_ASSERT(maxi(2,2) == 2);
} |
从上面可以看出,我们可以直接用CU_ASSERT这个宏来测试你的函数
demo(下面这个demo是自己写的,用来测试我的链表初始化函数)
INT32
cunit_link_list_init(void)
{
return 0;
}
INT32 cunit_link_list_cleanup(void)
{
return 0;
}
/*********************************************
***
*** Test Func : link_list_is_empty
***
*********************************************/
void link_list_test_case1(void)
{
BOOL retValue, expectValue;
LINK_LIST_T pList = link_list_init();
retValue = link_list_is_empty(pList);
expectValue = TRUE;
CU_ASSERT(retValue == expectValue);
}
void link_list_test_case2(void)
{
BOOL retValue, expectValue;
LINK_LIST_T pList = link_list_init();
link_list_insert_at_tail(1, pList);
retValue = link_list_is_empty(pList);
expectValue = TRUE;
CU_ASSERT(retValue == expectValue);
}
// test cases
CU_TestInfo link_list_test_case[] = {
{"link_list_is_empty_case1", link_list_test_case1},
{"link_list_is_empty_case2", link_list_test_case2},
CU_TEST_INFO_NULL,
};
// suite
CU_SuiteInfo suites[] =
{
{ "Test For Linked List", cunit_link_list_init,
cunit_link_list_cleanup, NULL, NULL, link_list_test_case
},
CU_SUITE_INFO_NULL,
};
int cunit_test_main(void)
{
if(CUE_SUCCESS != CU_initialize_registry())
{
printf("<CUnit Test> CU_initialize_registry
fail!!!\n");
return CU_get_error();
}
if(CUE_SUCCESS != CU_register_suites(suites))
{
printf("<CUnit Test> CU_register_suites
fail!!!\n");
CU_cleanup_registry();
return CU_get_error();
}
#if 0
//output file.xml
CU_set_output_filename("link_list_test_result");
CU_automated_run_tests();
#endif
CU_basic_set_mode(CU_BRM_VERBOSE);
CU_basic_run_tests();
CU_cleanup_registry();
return CU_get_error();
} |
运行结果如下
测试的结果一目了然,很方便。当然如果你觉得这样的输出结果还不够美观,那也可以用xml的方式去查看,如下图
要想生成XML文件,需要将上面代码注释的内容打开,也即是添加下面两行代码
CU_set_output_filename("link_list_test_result");
CU_automated_run_tests(); |
生成完XML文件之后,然后再将CUnit-List.dtd、CUnit-List.xsl、CUnit-Run.dtd、CUnit-Run.xsl(这几个文件在CUnit的源码包可以找到)和XML文件放到同一级目录,再用IE浏览器打开,就可以看到像上面的UI界面了。 |
|
|
|
|
|
|
|