CUnit在Linux下安装配置

来源:互联网 发布:数据库导入excel表格 编辑:程序博客网 时间:2024/04/29 12:48
CUnit在Linux下安装配置 (2009-09-26 00:39)
分类: 工具使用心得体会


CUnit在Linux下的配置说明
2009/07/22 17:02
关键字:CUnit Linux 配置 xml
      由于项目需要,对于C语言的单元测试工具CUnit在Linux下如何使用进行了调查,在网上对相关内容进行搜索发现,很多内容都很相近,甚至完全一样,在这篇争相转载的文章中,虽有详细的说明,但也有描述的不甚清晰之处,对于刚刚接触Linux的同学,往往是一头雾水,不能很顺利的配置出来。籍着此次的调查机会,现将具体的步骤和配置过程中需要注意的地方进行了补充说明,希望能对以后需要进行同样工作的同学有些帮助。

1、首先在http://cunit.sourceforge.net/index.html链接处,下载最新版本的CUnit源码包(CUnit-2.1-0-src.tar.gz)。
2、将CUnit源码包(CUnit-2.1-0-src.tar.gz)复制到Linux的目标目录下,比如我在这里放到了/usr/unittest目录下。
3、CUnit源码包的解压。打开[System Tools]-〉[Terminal],进入到/usr/unittest目录下,
输入如下命令:
#tar xzvf CUnit-2.1-0-src.tar.gz
执行结束后,将会在当前目录下生成一个解压后的文件夹(CUnit-2.1-0)。
4、解压结束后,开始进行编译和安装。
#cd CUnit-2.1-0
#aclocal 
#autoconf 
#automake 
#chmod u+x configure
#./configure --prefix <Your choice of directory for installation>
(对上一句进行解释,<Your choice of directory for installation>这个位置,需要你输入要安装的目录,目录的格式举例如下:/usr/unittest/)
#make
#make install
这里需要一段时间...
#cd /usr/unittest/lib
#ldconfig
最后这两句,感觉像是没什么用,有时间证实一下。
到此处为止,CUnit的安装基本上就到一段落了。
接下来是来测试我们的代码工作流程。
将要测试的代码复制到/usr/unittest目录下,
输入如下命令:
#export LD_LIBRARY_PATH=/usr/unittest/lib
#gcc -o test -I/usr/unittest/include -L/usr/unittest/lib -lcunit run_test.c test_func.c func.c
这样,即可在/usr/unittest目录下生成可执行文件test。
#./test
执行该文件,执行成功后,会在当前目录下产生两个xml文件。
①TestMax-Listing.xml :对测试用例的报告
②TestMax-Results.xml :对测试结果的报告 

要查看这两个文件,还需要使用如下xsl和dtd文件:
CUnit-List.dtd和CUnit-List.xsl用于解析列表文件,
CUnit-Run.dtd和CUnit-Run.xsl用于解析结果文件。
这四个文件在CUnit包里面有提供,安装之后在unittest/share/CUnit目录下,
默认安装的话在/home/usr/local/share/CUnit目录下。
在查看结果之前,需要把这六个文件:
TestMax-Listing.xml, TestMax-Results.xml, CUnit-List.dtd, CUnit-List.xsl, CUnit-Run.dtd, CUnit-Run.xsl拷贝到一个目录下,然后用浏览器打开两个结果的xml文件就可以了。

--------------------------------------------------
示例代码如下:
func.c
--------
int maxi(int i, int j)
{
    return i>j?i:j;
//        return i;
}
--------
test_func.c
--------
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include "include/CUnit/CUnit.h"
#include "include/CUnit/Automated.h"

/**//*---- functions to be tested ------*/
extern int maxi(int i, int j);

/**//*---- test cases ------------------*/
void testIQJ()
{
        CU_ASSERT_EQUAL(maxi(1,1),1);
        CU_ASSERT_EQUAL(maxi(0,-0),0);
}

void testIGJ()
{
        CU_ASSERT_EQUAL(maxi(2,1),2);
        CU_ASSERT_EQUAL(maxi(0,-1),0);
        CU_ASSERT_EQUAL(maxi(-1,-2),-1);
}

void testILJ()
{
        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 ------------------*/
int suite_success_init(void) { return 0; }
int suite_success_clean(void) { return 0; }

CU_SuiteInfo suites[] = {
        {"Testing the function maxi:", suite_success_init, suite_success_clean, testcases},
        CU_SUITE_INFO_NULL
};
/**//*---- setting enviroment -----------*/
void AddTests(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);
        }
}
--------
run_test.c
--------
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

int main( int argc, char *argv[] )
{
       printf("hello");
       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();
        }
        return 0;
}
-----------------------end--------------------------------
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 iphone6震动坏了怎么办 乳胶枕头有味道怎么办? 武林外传红名怎么办 热血江湖掉线怎么办 苹果手机恢复失败怎么办 社会保障卡掉了怎么办 街头抽奖被骗了怎么办 洗衣液执行标准怎么办 感冒了呼吸困难怎么办 50岁睡不着觉怎么办 不会睡觉了怎么办啊 专转本不成功怎么办 斐讯手环w1丢了怎么办 被罩拉链拉不合怎么办 拉链拉不合怎么办图解 塑料拉链不顺畅怎么办 隐形拉链不好拉怎么办 房东赶租客走怎么办 南京合租一间怎么办租房补贴 大学登错成绩怎么办 网游停服花了钱怎么办 北斗星x5油耗高怎么办 北斗星空调不凉怎么办 踏板摩托车费油怎么办 lol队友一直送怎么办 电脑信号无连接怎么办 电脑屏不全屏怎么办 电脑桌面不能显示全屏怎么办? 电脑黑屏无信号怎么办 笔记本电脑屏幕不显示怎么办 手机登录认证要怎么办 360手机丢失了怎么办 主播周年庆怎么办 学校选课系统进不去怎么办 选课系统关闭了怎么办 政府工作人员被威胁怎么办 报志愿忘记用户名怎么办 账号密码忘记了怎么办 商盟卡过期了怎么办 香港身份证掉了怎么办 简易注销有异议怎么办