首页 > 编程知识 正文

makemenuconfig详解,linux系统自学教程

时间:2023-05-03 22:44:13 阅读:40255 作者:1253

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当中显示如下:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。