4.C Test
1 )个人资料
C Test是一种强大的自动化C/C单元级测试工具,可自动测试任何C/C函数、类,并自动生成测试用例、测试驱动函数或桩函数,在自动化环境中实现单元级测试覆盖率100%
2 )功能特性
实时测试类/函数
支持极端编程模式下的代码测试
自动为类/函数创建测试驱动程序和桩调用
自动创建并运行类/函数的测试用例
为快速添加和运行说明和功能测试提供了框架
执行自动回归测试
运行部件测试(COM )
3 )价格
不熟悉
4 )相关网站
第二部分
转自: http://blog.csdn.net/Colin 719/archive/2006/11/29/1420583.aspx
c单元测试
敏捷开发离不开单元测试,JUnit在Java开发中非常出色。 c开发也有CPPUnit,但传统的c语言开发没有很好的工具。 可以找到的工具包括:
cutest----cutest(cutetest )是一种非常简单的c语言单元测试工具。 使用它时,只需包含两个文件“CuTest.c CuTest.h”,就可以编写测试用例进行测试。 几乎没有用例管理功能,报告输出也非常简单,可以考验单元测试的基本思路。
计数- -计数是一个轻量级的c语言单元测试框架。 提供设计、管理和运行测试用例的功能。 报告功能强大,但麻烦,适合更大的项目。
Check --是个好工具。
这里()出现了各种各样的软件测试工具,如果没问题的话请考虑一下。
计数管
这里主要谈CUnit在Linux平台上的应用。 这里有CUnit测试工具。 另一个是http://cunit.SourceForge.net/index.html。
CUnit作为静态库提供给用户,用户编写程序时直接链接此静态库即可。 它提供了一个简单的单元测试框架,并提供了对常见数据类型断言语句的丰富支持。
CUnit基本体系结构
测试注册表
|
-------------请参阅
| |
Suite '1' . Suite 'N '
| |
-------------请参阅
|||
test ' 11 ' . test ' 1m ' test ' n1 ' . test ' nm '
一次测试可以运行多个测试包“测试套件”。 每个测试包可以包含多个测试用例“Test Case”,每个测试用例都包含一个或多个断言类的语句。 具体来说,在程序结构上,一次测试管辖多个测试套件,它对应于程序中的各个独立模块; 一个套件管理多个测试情况,它对应于模块内部函数的实现。 每个套件都可以包含在套件运行前后分别调用的setup和teardown函数。
计数测试模式
CUnit使用以下四个不同的界面执行测试并报告测试结果:
自动输出到XML文件,非交互式
基本的扩展编程方式,非交互式
控制台方式、交互
Curses图形界面,交互式
请注意,1和2是非交互式的。 4只能在Unix上使用。 我经常使用控制台。 而且控制台可以与人类进行对话。
计数测试流程
使用CUnit进行测试的基本过程如下。
编写代理测试的函数(如果需要,需要编写suite的init/cleanup函数)。
初始化testregistry-Cu _ initialize _ registry ()
将测试包(Test Suites (添加到测试注册表- Cu _ add _ suite ) )中
测试用例(将Test Case (添加到测试包- CU_add_test ) ) )。
使用相应的接口运行测试程序。 例如,CU_console_run_tests (
testregistry-Cu _ clean up _ registry (
CUnit使用案例
CUnit的在线文档在http://cunit.SourceForge.net/doc/index.html中进行了详细描述。 在这里,您将使用自动生成XML文件
的接口为例,讲述CUnit-2.1-0在Linux平台下的使用。我要测试的是整数求最大值的函数maxi,我使用如下文件组织结构:
func.c :定义maxi()函数
test_func.c :定义测试用例和测试包
run_test.c :调用CUnit的Automated接口运行测试
Makefile :生成测试程序。
这样组织的好处是,我们可以把各个功能分离,当要改变待测试函数的定义的时候,我们只需要修改func.c,而要增减、修改测试用例,只修改test_func.c就可以了,要使用CUnit提供的别的API,那就修改run_test.c。
它们的内容分别如下所示:
1) func.c
/**
* file: func.c
**/
intmaxi(inti,intj)
{
//return i>j?i:j;returni;
}
2) test_func.c
/**
* file: test_func.c
**/#include#include#include#include"CUnit/CUnit.h"#include"CUnit/Automated.h"
/*---- functions to be tested ------*/externintmaxi(inti,intj);
/*---- test cases ------------------*/voidtestIQJ()
{
CU_ASSERT_EQUAL(maxi(1,1),1);
CU_ASSERT_EQUAL(maxi(0,-0),0);
}
voidtestIGJ()
{
CU_ASSERT_EQUAL(maxi(2,1),2);
CU_ASSERT_EQUAL(maxi(0,-1),0);
CU_ASSERT_EQUAL(maxi(-1,-2),-1);
}
voidtestILJ()
{
CU_ASSERT_EQUAL(maxi(1,2),2);
CU_ASSERT_EQUAL(maxi(-1,0),0);
CU_ASSERT_EQUAL(maxi(-2,-1),-1);
}
CU_TestInfo testcases[]={
{"Testing i equals j:", testIQJ},
{"Testing i greater than j:", testIGJ},
{"Testing i less than j:", testILJ},
CU_TEST_INFO_NULL
};
/*---- test suites ------------------*/intsuite_success_init(void){return0; }intsuite_success_clean(void){return0; }
CU_SuiteInfo suites[]={
{"Testing the function maxi:", suite_success_init, suite_success_clean, testcases},
CU_SUITE_INFO_NULL
};
/*---- setting enviroment -----------*/
voidAddTests(void)
{
assert(NULL!=CU_get_registry());
assert(!CU_is_test_running());
/*shortcut regitry*/
if(CUE_SUCCESS!=CU_register_suites(suites)){
fprintf(stderr,"Register suites failed - %s", CU_get_error_msg());
exit(EXIT_FAILURE);
}}
3) run_test.c
/**
* file: run_test.c
**/
#include#include#include
intmain(intargc,char*argv[] )
{
if(CU_initialize_registry()){
fprintf(stderr,"Initialization of Test Registry failed.");
exit(EXIT_FAILURE);
}else{
AddTests();
CU_set_output_filename("TestMax");
CU_list_tests_to_file();
CU_automated_run_tests();
CU_cleanup_registry();
}return0;
}
4) Makefile
INC=-I/home/lirui/local/include
LIB=-L/home/lirui/local/lib
all: func.c test_func.c run_test.c
gcc -o test$(INC)$(LIB)-lcunit -lcurses -static$^
由于CUnit是以库的形式提供的,所以我们在编译和链接的时候需要指明头文件和库所在的位置,又由于使用了Curses库,所以也要指定这个。
测试报告
运行上面产生的test程序,会在当前目录下产生两个xml文件:
TestMax-Listing.xml :对测试用例的报告
TestMax-Results.xml :对测试结果的报告
要 查看这两个文件,需要使用如下xsl和dtd文件:CUnit-List.dtd和CUnit-List.xsl用于解析列表文件, CUnit-Run.dtd和CUnit-Run.xsl用于解析结果文件。这四个文件在CUnit包里面有提供,安装之后在$(PREFIX) /share/CUnit目录下,在我的配置当中,它在/home/lirui/local/share/CUnit目录下。在查看结果之前,需要把这六 个文件:TestMax-Listing.xml, TestMax-Results.xml, CUnit-List.dtd, CUnit-List.xsl, CUnit-Run.dtd, CUnit-Run.xsl拷贝到一个目录下,然后用浏览器打开两个结果的xml文件就可以了。
1) TestMax-Listing.xml在IE当中显示如下:
2) TestMax-Results.xml在IE当中显示如下: