CUnit用法总结

简介

CUnit是一个用C语言写的单元测试库,它是一个简单的测试框架,提供了丰富的断言语句来测试常用的数据类型,此外,对于跑测试用例和反馈测试结果,CUnit都有一些不同的接口,它可以编译成动态库或者静态库。

基本框架

CUnit是一个可以跨平台的框架。它只有一个Test Registry, 一次测试(Test Registry)可以运行多个测试包(Test Suite),而每个测试包可以包括多个测试用例(Test Case),每个测试用例又包含一个或者多个断言类的语句。如下图所示
CUnit用法总结_第1张图片

基本流程

1)准备好你要测试的函数
2)初始化test注册函数:CU_initialize_registry()
3)添加测试包:CU_add_suite()
4)添加测试用例:CU_add_test()
5)运行测试用例:比如,CU_console_run_tests
6)清除test注册资源:CU_cleanup_registry

测试函数说明(下面CUnit自带的说明)

int maxi(int i1, int i2)
{
  return (i1 > i2) ? i1 : i2;
}

void test_maxi(void)
{
  CU_ASSERT(maxi(0,2) == 2);
  CU_ASSERT(maxi(0,-2) == 0);
  CU_ASSERT(maxi(2,2) == 2);
}
从上面可以看出,我们可以直接用CU_ASSERT这个宏来测试你的函数

demo(下面这个demo是自己写的,用来测试我的链表初始化函数)

    INT32 cunit_link_list_init(void)
    {
        return 0;
    }

    INT32 cunit_link_list_cleanup(void)
    {
        return 0;
    }

    /********************************************* *** *** Test Func : link_list_is_empty *** *********************************************/
    void link_list_test_case1(void)
    {
        BOOL retValue, expectValue;

        LINK_LIST_T pList = link_list_init();

        retValue = link_list_is_empty(pList);
        expectValue = TRUE;

        CU_ASSERT(retValue == expectValue);
    }

    void link_list_test_case2(void)
    {
        BOOL retValue, expectValue;

        LINK_LIST_T pList = link_list_init();
        link_list_insert_at_tail(1, pList);

        retValue = link_list_is_empty(pList);
        expectValue = TRUE;    

        CU_ASSERT(retValue == expectValue);
    }

    // test cases
    CU_TestInfo link_list_test_case[] = {
        {"link_list_is_empty_case1", link_list_test_case1},
        {"link_list_is_empty_case2", link_list_test_case2},  
        CU_TEST_INFO_NULL,
    };

    // suite
    CU_SuiteInfo suites[] = 
    {
        { "Test For Linked List", cunit_link_list_init, cunit_link_list_cleanup, NULL, NULL, link_list_test_case },
        CU_SUITE_INFO_NULL,
    };


    int cunit_test_main(void)
    {
        if(CUE_SUCCESS != CU_initialize_registry())
        {
            printf("<CUnit Test> CU_initialize_registry fail!!!\n");
            return CU_get_error();
        }

        if(CUE_SUCCESS != CU_register_suites(suites)) 
        {
            printf("<CUnit Test> CU_register_suites fail!!!\n");
            CU_cleanup_registry();
            return CU_get_error();
        }    

    #if 0
        //output file.xml
        CU_set_output_filename("link_list_test_result");
        CU_automated_run_tests();
    #endif

        CU_basic_set_mode(CU_BRM_VERBOSE);
        CU_basic_run_tests();

        CU_cleanup_registry();

        return CU_get_error();
    }

运行结果如下
CUnit用法总结_第2张图片

测试的结果一目了然,很方便。当然如果你觉得这样的输出结果还不够美观,那也可以用xml的方式去查看,如下图
CUnit用法总结_第3张图片
要想生成XML文件,需要将上面代码注释的内容打开,也即是添加下面两行代码

    CU_set_output_filename("link_list_test_result");
    CU_automated_run_tests();

生成完XML文件之后,然后再将CUnit-List.dtd、CUnit-List.xsl、CUnit-Run.dtd、CUnit-Run.xsl(这几个文件在CUnit的源码包可以找到)和XML文件放到同一级目录,再用IE浏览器打开,就可以看到像上面的UI界面了。

PS:关于CUnit的安装说明请参考下面这篇文章
Ubuntu 14.04 安装CUnit

你可能感兴趣的:(单元测试,C语言)