当前位置: 首页 > 工具软件 > CUnit > 使用案例 >

学习CUNIT

唐俊英
2023-12-01


 本文档介绍CUNIT工具的基本使用方法。

 


1. CUNIT简单介绍

C语言环境下开发源码的白盒测试用例CUnit。CUnit以静态库的形式提供给用户使用,用户编写程序的时候直接链接此静态库就可以了。它提供了一个简单的单元测试框架,并且为常用的数据类型提供了丰富的断言语句支持。

 


2. CUNIT的下载

 CUNIT官网介绍:http://cunit.sourceforge.net/

CUNIT网络源码下载地址http://sourceforge.net/projects/cunit/

 

CUNIT的安装依赖curses/ncurses:

curses/ncurses下载地址:http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.9.tar.gz

 


3. CUNIT安装

curses/ncurses的安装命令:

# tar -zxvf ncurses-5.9.tar.gz
# cd ncurses-5.9
# ./configure
# make
# make install

CUNIT的安装命令:

# tar -jxvf CUnit-2.1-2-src.tar.bz2
# cd CUnit-2.1-2
# ./configure
# make
# make install

修改配置文件:

#vi /etc/profile
文件尾增加一行:PATH=$PATH:/usr/local/include
#vi /etc/ld.so.conf
文件尾加一行:/usr/local/lib
最后执行命令:
#ldconfig

 

4.使用方法示例

示例代码:

文件列表:

exam.c exam.h             :需要测试的单元模块

testcase.c testcase.h        :测试用例

main.c                          :CUNIT main函数

Makefile                       :makefile文件

 

exam.h源文件:

#ifndef __EXAM__H__
#define __EXAM__H__
int fun1();
#endif

 exam.c源文件:

#include <stdio.h>
#include "exam.h"
/***************************************************
Function:真正需要测试的单元模块
Remark: 
***************************************************/
int fun1()
{
       returna > b ? a : b;
}
 

testcase.h源文件:

#ifndef __TESTCASE__H__
#define __TESTCASE__H__
int InitSuite();
int EndSuite();
void test_fun1();
#endif
 

testcase.c源文件:

#include "testcase.h"
#include "exam.h"
/****************************************************************
Function:模块测试初始化工作,对模块内部Test函数需要用到的资源初始化
        如当前里例子中则对fun1中使用的到的资源初始化
Input:   None
Return:  0 if Succeed, or False
Remark:  如果成功才进测试函数的测试运行否则此Suite下挂载的Test均不运行
****************************************************************/
int InitSuite()
{
       return0;
}

/*******************************************************************
Function:模块测试销毁工作,对模块内部Test函数需要用到的资源进行销毁
        如当前里例子中则对fun1中使用的到的资源释放
Input:   None
Return:  0 if Succeed, or False
Remark:不影响Test的运行,失败会报suite运行错误
******************************************************************/
int EndSuite()
{
       return0;
}

 /******************************************************************
Function:   单元测试例子也内部装载自己的函数过程
Input:         ignore
Return:        void
Remark:       失败会记录Test失败,内部可以使用CU_ASSERT检测最终会有检测结果
                   CU_ASSERT中检测到的才是真正意义上的用户函数
******************************************************************/ 
void test_fun1()
{
       inta = 1, b = 2;
       CU_ASSERT(fun1(a,b) == a);
}


 main.c源文件:

#include <stdio.h>
#include "CUnit/Basic.h"
#include "CUnit/CUnit.h"
#include "CUnit/CUError.h"
#include "CUnit/TestDB.h"
#include "CUnit/TestRun.h"
#include "CUnit/Automated.h"
#include "CUnit/Console.h"
#include "testcase.h"

int main()
{
       CU_pSuitepSuite = NULL;

       //CU_initialize_registry 注册函数注册一个用例返回CUE_系列异常值
       if(CUE_SUCCESS!= CU_initialize_registry())
       {
              returnCU_get_error();
       }

       //CU_add_suite增加一个Suite
       //"mySuite": Suite名字 
       //InitSuite EndSuite:分别是测试单元初始和释放函数,如不需要则NULL传递
       pSuite= CU_add_suite("mySuite", InitSuite, EndSuite);
       if(NULL== pSuite)
       {
              CU_cleanup_registry();
              returnCU_get_error();
       }

       //注册当前Suite下的测试用例
       //pSuite:用例指针
       //" test_fun1": 测试单元名称
       // test_fun1:测试函数
       if(NULL== CU_add_test(pSuite, "test_fun1", test_fun1))
       {
              CU_cleanup_registry();
              returnCU_get_error();
       }

       //使用console控制交互界面的函数入口
       CU_console_run_tests();
       //调用完毕清除注册信息
       CU_cleanup_registry();

       return0;
} 
Makefile文件:
all:
       gcc-c exam.c
       gcc-c testcase.c
       gcc-c main.c
       gcc-o out main.o exam.o testcase.o -lcunit

clean:
       -rm *.o
       -rm out




 

 

5. 运行

执行make之后,生成out可执行文件,运行可执行文件后的效果图:

各个命令:

(R)un             :运行测试用例

(S)elect          :选择测试包

(L)ist             :显示初始化的测试包(Suite)

(A)ctivate       :激活测试包

(F)ailures              :失败的测试用例

(O)ption         :

(H)elp            :帮助

(Q)uit            :退出

 

执行命令R:

可以看到显示的测试包(Suite)、测试用例(tests)、断言错误数目(asserts)等信息。

 

执行命令F:

可以看到测试用例失败所对应的代码信息。

 其它命令则可以激活/不激活测试包等操作,这里不再详述。

 

 

参考:

http://iamsunjianming.blog.sohu.com/55842807.html

http://hi.baidu.com/benben_me/blog/item/b1f50d0cceb6ed276159f37d.html

http://blog.csdn.net/livelylittlefish/article/details/6361269

 类似资料: