针对C语言的测试框架相比其他语言要少一些,本文简单介绍一下Cunit框架的基本使用方法,权当备忘吧。Cunit的组织框架如下图所示:

将单个测试用例打包到一个suite中,这些suite在Registry中注册。registry中的所有suite/tests可以使用单个函数调用运行,也可以运行选定的套件或测试。下面看一个例子

首先我们新建文件,写一个待测试函数,这里以一个字符串转换数字函数为例,这是我们的第一版实现

// convert.c
// 版本1
int
str_to_int(char* s)
{int sum = 0;char *p = s;while (*p != 0) {sum = sum * 10 + *p -'0';p++;}return sum;
}

显然这个函数是有很多问题的,我们写一个测试函数来测试它。

void
TEST_str_to_int()
{int ans;char *p;char *ps[] = { "123", "-123", "0", "siahideib",  "2147483648", "2147483647", "-1-2", "            -2147483647", "  -2147483648aaaa"};int real[] = {123,    -123,   0,   0,            0,            2147483647,   -1,     -2147483647,               -2147483648};int i = 0;for (i = 0; i < sizeof(real)/sizeof(real[0]); i++) {ans = str_to_int(ps[i]);CU_ASSERT_EQUAL(ans,real[i]);}
}

测试函数和被测函数写好之后,我们就可以定义一个registry 和一个suite,在suite中添加被测函数,并在registry中注册。

addTestModule()
{CU_pSuite pSuite = NULL;// 添加suitepSuite = CU_add_suite("str_to_int测试模块", suite_success_init, suite_success_clean);  if (pSuite == NULL) {return -1;}// 在suite中添加被测函数if (NULL == CU_add_test(pSuite,"str_to_int",TEST_str_to_int)) {return -1;}return 0;
}

Cunit提供了三种模式查看单元测试结果,分别是控制台模式,基本模式和报表模式

void
run_test()
{if (CU_initialize_registry()) {printf("error");return ;} assert(NULL != CU_get_registry());assert(!CU_is_test_running()); if (0 != addTestModule()) {CU_cleanup_registry();return ;}// 报表模式// 设置输出文件名称CU_set_output_filename("str_to_int_test_report");CU_list_tests_to_file();CU_automated_run_tests();// 基本模式// CU_basic_set_mode(CU_BRM_VERBOSE);// CU_basic_run_tests();      // 控制台模式// CU_console_run_tests();       // CU_console_run_tests();CU_cleanup_registry();
}

最后写一个main函数来调用测试函数

#include<stdio.h>
#include "test.h"
int
main()
{run_test();return 0;
}

编译运行

gcc -g convert.c main.c test.c -lcunit
./a.out

运行完成后,在当前目录下可以看到生成了两个xml文件,这两个文件就是得到的测试结果。

str_to_int_test_report-Listing.xml
str_to_int_test_report-Results.xml

不过这两个文件不能直接打开,需要把cunit安装目录下的另外四个文件复制过来。如果默认安装的话,这四个文件一般在/usr/local/share/CUnit目录下

CUnit-List.dtd
CUnit-List.xsl
CUnit-Run.dtd
CUnit-Run.xsl

把这6个文件拷贝到同一路径下,就可以通过IE或者Edge浏览器查看输出结果。

可以看到,9个测试用例有3个没有通过。改进一下被测函数

// convert.c
// 版本2
int
str_to_int(char* s)
{int     sign = 1;char    *p = s;long    sum = 0;// 指针判空if (!s) {return 0;}// 排除空格while (*p == ' ')p++;//控制符号if (*p == '-') {sign = -1;p++;} else if (*p == '+') {sign = 1;p++;}while (*p >= '0' && *p <= '9') {// 左移比乘法效率高,注意优先级sum = (sum << 3) + (sum << 1) + *p -'0';// 处理溢出if ((sum > INT_MAX && sign == 1) || sum > (long)INT_MAX + 1 && sign == -1) {sum = 0;break;}p++;}return (int)sum * sign;
}

重新编译,运行,看一下测试结果,这一次9个case全部通过

C语言单元测试框架unit的使用相关推荐

  1. c语言语法sc,适合于嵌入式系统的C语言单元测试框架:SCUNIT

    说明 主流语言都有测试框架,在嵌入式领域特别是资源紧缺的单片机工程中没有合适的测试框架.本文发布一种简单的C语言测试框架SCUNIT,可以应用于嵌入式领域. 测试环境 本框架是基于标准C语言编写,对平 ...

  2. C语言单元测试框架——CUnit

    C语言单元测试框架--CUnit 文章目录 C语言单元测试框架--CUnit 1.CUnit简介 2.CUnit安装 2.1.安装配置--Ubuntu 2.2.安装步骤 2.3.安装文件 3.CUni ...

  3. c语言的自动测试工具,C语言单元测试框架--check工具

    C语言单元测试框架--check工具 虽然在UNIX上用C语言做开发已经有一段时间了,但是我不得不承认,自己单元测试做的并不好.恰好最近有新的开发任务,就学习了一些关于测试驱动开发的知识,准备改进自己 ...

  4. C语言单元测试框架详解:第一篇

    目录 一.单元测试定义 二.C语言单元测试框架汇总 三.C语言测试推荐书籍 一.单元测试定义 单元测试是指对软件中的最小可测试单元进行检查和验证,如C语言中单元指一个函数,Java里单元指一个类.单元 ...

  5. 【嵌入式单元测试】C语言单元测试框架搭建

    cmocka cmocka交叉编译 源码下载 编译准备 源码修改 指定编译器 编译 cmocka使用示例 常见问题 参考 单元测试框架是一个软件包,它能够让开发者比较方便的表达产品代码需要表现出什么样 ...

  6. c语言测试框架设计,C语言单元测试框架Check

    什么是Check Check是C语言的一个单元测试框架.它提供一个小巧的单元测试接口.测试案例运行在各自独立的地址空间,所以断言失败和代码错误造成的段错误或者其他的信号可以被捕捉到.另外,测试的结果显 ...

  7. C语言单元测试框架——CUnit 安装(windows和Linux)及使用

    目录 CUnit CUnit Windows 安装 CUnit Linux(Ubuntu) 安装 一键把cunit测试结果(Basic)和gcov覆盖率结果合并 gcov python代码 bat代码 ...

  8. C语言单元测试框架-cmocka示例

    #include <cmocka.h> //Google自动化测试static void test_1(void **state) {//code }static void test_2( ...

  9. C语言单元测试embUnit入门学习

    本人原创,转载请注明出处. 目录 学习目标 2.c语言面向对象编程 2.1c语言继承实现 2.1.1子类结构体包含父类结构体 2.1.2子类结构体包含父类结构中的指针 2.1.3结构体和指针有何不同 ...

最新文章

  1. vcruntime140.dll 丢失64位系统(mysql8安装失败提示)
  2. android jni 回调 java_android linux线程通过JNI回调java函数 | 学步园
  3. xcode6是否导入framework
  4. NTT通信公司在大阪开通运营容灾数据中心
  5. win8安装wampserver报403错误解决方法
  6. 5G 的 NSA 和 SA,到底是啥?
  7. python编程 上册第4版_统编版四年级语文上册第1课观潮视频+课件+练习
  8. Android Studio 的蓝牙串口通信(附Demo源码下载)
  9. 雷电模拟器连接hb_原生的安卓模拟器来了,微软发布Your Phone,与三星独家合作...
  10. input file 选择图片并显示
  11. 决策树ID3、C4.5和CART算法总结,及案例计算
  12. freeMarker(十)——模板语言之内建函数
  13. 联想计算机如何进bois,联想电脑怎么进入bios 联想进入bios方法【图文】
  14. openmv一些常见问题与心得总结
  15. 计算机研究生论文数学公式,研究生论文公式符号细则.doc
  16. 沙扬娜拉--靠!今天怎么了,成了诗人?!
  17. Windows音频录制软件哪个好
  18. 大话西游手游服务器合服信息查询,大话西游手游合区后能一起玩吗?合区登陆问题详解[图]...
  19. 洛谷刷题:火星人、奖学金、纪念品分组、统计数字、字符串的展开
  20. java.io.file()_Java-IO(一)——IO和File

热门文章

  1. stm32实现iap远程固件更新
  2. Android 实现USB转串口通信
  3. 百度高级科学家——王海峰
  4. android 拦截webview加载url_WebView拦截url
  5. 融合通信应急调度系统解决方案
  6. 编辑Windows右键新建菜单
  7. 使用wmic命令获得计算机硬件信息
  8. C#中HttpWebRequest、WebClient、HttpClient 、HttpClientFactory Flurl、的使用总结
  9. 修改远程桌面端口bat批处理(windows)
  10. 解决IDEA安装出现NSIS错误的问题