c语言测试工具 掌握CUnit
2005-12-17 16:43
204 查看
1.继Junit CppUnit的成功后, c语言环境下也出现了开发源码的白盒测试用例CUnit。
暂时CUnit只是在SourceForge上还再不断改进中,虽然不是很完善,但是能用。
下面介绍一下CUnit结构框架和具体使用
2.结构框架:
在CUnit的主页上可以看到对他结构简单描述
Test Registry
|
------------------------------
| |
Suite '1' . . . . Suite 'N'
| |
--------------- ---------------
| | | |
Test '11' ... Test '1M' Test 'N1' ... Test 'NM'
CUnit的测试是单线程启动,只能注册一个测试用例Test Registry,我认为这和结构设计和需求有关
单线程数据结构是多重链表(对Suite,Test)组织起来,除非对测试用例再进行链表组织那样管理层次上
已经多达到3层嵌套实现麻烦,并且用户需求和习惯也就是能接受一个作为一个独立用例一次测试。
所以没有必要再费精力。
继续结构分析一个起始测试下辖多个Suite(可以认为程序中各个独立模块),一个Suite管理多个Test
(可以认为具体到模块内部函数实现)。
整体测试流程就是这样:
注册一个测试用例(如果已经注册了你可以cleanup掉然后重新注册使用)然后CU_add_suite增加你的模块
然后CU_add_test再在你的模块下挂载你的模块内的测试函数。所有的挂载完毕后,调用你想使用的界面进行
测试。
下面是四种测试模式:
1 Automated Output to xml file Non-interactive
2 Basic Flexible programming interface Non-interactive
3 Console Console interface (ansi C) Interactive
4 Curses Graphical interface (Unix) Interact
注意12是没有交互功能的,4的Unix下的我是windows用户 选择第三个介绍console
而且console是可以人机交互的。
3.具体使用
1.没有CUnit源码去http://sourceforge.net/projects/cunit/
去down一份,这里是CUnit-2.0-2的例子。
2.新建console工程 把自己要测试的代码文件加载进去,独立建一个main文件
3.
#include <stdio.h>
#include "console.h"
#include <assert.h>
/*
* Function:模块测试初始化工作,对模块内部Test函数需要用到的资源初始化
如当前里例子中则对Test1,Test2中使用的到的资源初始化
* Input: None
* Return: 0:Succeed, or False
* Remark: 如果成功才进测试函数的测试运行否则此Suite下挂载的Test均不运行
*
*/
int InitSuite()
{
return 0;
}
/*
* Function:模块测试销毁工作,对模块内部Test函数需要用到的资源进行销毁
如当前里例子中则对Test1,Test2中使用的到的资源释放
* Input: None
* Return: 0:Succeed, or False
* Remark: 不影响Test的运行,失败会报suite运行错误
*
*/
int EndSuite()
{
return 1;
}
/*
* 自己定义的函数过程形式不限制 可以extern近来或者包含,h近来供测试
*/
int MyTest1()
{
return 1;
}
BOOL MyTest2()
{
return FALSE;
}
/*
* Function: 单元测试例子也内部装载自己的函数过程
* Input: ignore
* Return: true:Succeed, or False
* Remark: 失败回记录Test失败,内部可以使用CU_ASSERT检测最终会有检测结果
* CU_ASSERT中检测到的才是真正意义上的用户函数
*
*/
int Test1()
{
CU_ASSERT(MyTest1());
return 1;
}
BOOL Test2()
{
CU_ASSERT(MyTest2());
return FALSE;
}
/*
* 使用过程
*/
int main()
{
CU_pSuite pSuite = NULL;
//CU_initialize_registry 注册函数注册一个用例返回CUE_系列异常值
if( CUE_SUCCESS != CU_initialize_registry())
return CU_get_error();
//CU_get_registry 返回注册到用例指针
assert(NULL != CU_get_registry());
//检测是否在执行
assert(!CU_is_test_running());
//CU_add_suite 增加一个Suite
//"mySuite": Suite名字
//InitSuite EndSuite:分别是测试单元初始和释放函数,如不需要则NULL传递
pSuite = CU_add_suite("mySuite",InitSuite, EndSuite);
//检测注册suite情况
if(NULL == pSuite)
{
CU_cleanup_registry();
return CU_get_error();
}
//注册当前Suite下的测试用例
//pSuite:用例指针
//"Test1": 测试单元名称
//Test1:测试函数
if( NULL == CU_add_test(pSuite, "Test1", Test1) ||
NULL == CU_add_test(pSuite, "Test2", Test2) )
{
CU_cleanup_registry();
return CU_get_error();
}
//使用console控制交互界面的函数入口
CU_console_run_tests();
//调用完毕清除注册信息
CU_cleanup_registry();
}
4:使用中可能出现的情况
a: 找不到某些函数 加载CUnit.lib 在CUnit目录下,不行你就搜索吧
b: #include "console.h" 找不到的话就inclue的console目录进来
c: 注意使用不同模式测试可能需要平台不同 小心不要搞出问题了console是标准的
暂时CUnit只是在SourceForge上还再不断改进中,虽然不是很完善,但是能用。
下面介绍一下CUnit结构框架和具体使用
2.结构框架:
在CUnit的主页上可以看到对他结构简单描述
Test Registry
|
------------------------------
| |
Suite '1' . . . . Suite 'N'
| |
--------------- ---------------
| | | |
Test '11' ... Test '1M' Test 'N1' ... Test 'NM'
CUnit的测试是单线程启动,只能注册一个测试用例Test Registry,我认为这和结构设计和需求有关
单线程数据结构是多重链表(对Suite,Test)组织起来,除非对测试用例再进行链表组织那样管理层次上
已经多达到3层嵌套实现麻烦,并且用户需求和习惯也就是能接受一个作为一个独立用例一次测试。
所以没有必要再费精力。
继续结构分析一个起始测试下辖多个Suite(可以认为程序中各个独立模块),一个Suite管理多个Test
(可以认为具体到模块内部函数实现)。
整体测试流程就是这样:
注册一个测试用例(如果已经注册了你可以cleanup掉然后重新注册使用)然后CU_add_suite增加你的模块
然后CU_add_test再在你的模块下挂载你的模块内的测试函数。所有的挂载完毕后,调用你想使用的界面进行
测试。
下面是四种测试模式:
1 Automated Output to xml file Non-interactive
2 Basic Flexible programming interface Non-interactive
3 Console Console interface (ansi C) Interactive
4 Curses Graphical interface (Unix) Interact
注意12是没有交互功能的,4的Unix下的我是windows用户 选择第三个介绍console
而且console是可以人机交互的。
3.具体使用
1.没有CUnit源码去http://sourceforge.net/projects/cunit/
去down一份,这里是CUnit-2.0-2的例子。
2.新建console工程 把自己要测试的代码文件加载进去,独立建一个main文件
3.
#include <stdio.h>
#include "console.h"
#include <assert.h>
/*
* Function:模块测试初始化工作,对模块内部Test函数需要用到的资源初始化
如当前里例子中则对Test1,Test2中使用的到的资源初始化
* Input: None
* Return: 0:Succeed, or False
* Remark: 如果成功才进测试函数的测试运行否则此Suite下挂载的Test均不运行
*
*/
int InitSuite()
{
return 0;
}
/*
* Function:模块测试销毁工作,对模块内部Test函数需要用到的资源进行销毁
如当前里例子中则对Test1,Test2中使用的到的资源释放
* Input: None
* Return: 0:Succeed, or False
* Remark: 不影响Test的运行,失败会报suite运行错误
*
*/
int EndSuite()
{
return 1;
}
/*
* 自己定义的函数过程形式不限制 可以extern近来或者包含,h近来供测试
*/
int MyTest1()
{
return 1;
}
BOOL MyTest2()
{
return FALSE;
}
/*
* Function: 单元测试例子也内部装载自己的函数过程
* Input: ignore
* Return: true:Succeed, or False
* Remark: 失败回记录Test失败,内部可以使用CU_ASSERT检测最终会有检测结果
* CU_ASSERT中检测到的才是真正意义上的用户函数
*
*/
int Test1()
{
CU_ASSERT(MyTest1());
return 1;
}
BOOL Test2()
{
CU_ASSERT(MyTest2());
return FALSE;
}
/*
* 使用过程
*/
int main()
{
CU_pSuite pSuite = NULL;
//CU_initialize_registry 注册函数注册一个用例返回CUE_系列异常值
if( CUE_SUCCESS != CU_initialize_registry())
return CU_get_error();
//CU_get_registry 返回注册到用例指针
assert(NULL != CU_get_registry());
//检测是否在执行
assert(!CU_is_test_running());
//CU_add_suite 增加一个Suite
//"mySuite": Suite名字
//InitSuite EndSuite:分别是测试单元初始和释放函数,如不需要则NULL传递
pSuite = CU_add_suite("mySuite",InitSuite, EndSuite);
//检测注册suite情况
if(NULL == pSuite)
{
CU_cleanup_registry();
return CU_get_error();
}
//注册当前Suite下的测试用例
//pSuite:用例指针
//"Test1": 测试单元名称
//Test1:测试函数
if( NULL == CU_add_test(pSuite, "Test1", Test1) ||
NULL == CU_add_test(pSuite, "Test2", Test2) )
{
CU_cleanup_registry();
return CU_get_error();
}
//使用console控制交互界面的函数入口
CU_console_run_tests();
//调用完毕清除注册信息
CU_cleanup_registry();
}
4:使用中可能出现的情况
a: 找不到某些函数 加载CUnit.lib 在CUnit目录下,不行你就搜索吧
b: #include "console.h" 找不到的话就inclue的console目录进来
c: 注意使用不同模式测试可能需要平台不同 小心不要搞出问题了console是标准的
相关文章推荐
- 通过一个实例掌握测试工具JMeter的一些基本概念
- 猎豹网校快速掌握 QTP 测试工具
- linux环境下C语言实现非阻塞方式读取字符串数据的串口测试程序,即串口工具的编写
- CUnit测试工具简介及下载地址
- [转贴]Cunit测试工具使用
- 【讨论帖】初步接触LR性能测试工具,关于C语言脚本编程的malloc函数使用
- 有效测试=需求明确+深入掌握被测程序和测试工具--应用安全测试:双面的黑盒
- [转]测试你对C语言的掌握情况
- C语言 - 简易的本地测试基本工具
- CUnit测试工具简介及下载地址
- CUnit使用入门-精简的C语言单元测试工具
- RabbitMQ调试与测试工具-v1.0.1 -提供下载测试与使用
- tespeed-测试网速的Python工具
- 网站压力测试工具集
- 分布式文件系统测试方法与测试工具
- 网站压力测试工具 webbench 安装配置
- 测试数据生成工具
- 使用Apache的ab工具进行压力测试
- 工作用到的正则及测试工具
- php测试并发连接数小工具