CUnit提供一个统一的C语言单元测试框架,是开发过程比较实用的工具。
今天尝试在自己的虚拟机上搭建CUnit的测试环境,搭建过程中遇到些问题,在网上找了一些解决方案但都没有凑效。最终的解决方案在网上也没有提及,记录下来,留给后续可能需要的人。
一、 CUnit的获取、编译与安装
这一部分网上资料很丰富,大部分过程都是一样的:
1.获取软件包
2. # tar -xvf CUnit-2.1-2-src.tar
3. # cd CUnit-2.1-2
4. # ./configure
5. make
6.make install
7. #cd /usr/local/lib
#ldconfig
重点:
CUnit依赖于 curses类库,需要先安装curses
二、测试范例
CUnit安装完毕之后,使用网上流行的案例对安装好的Cunit进行验证:
1. 生成待验证函数 int Max(int i , int j) /*这个大家都会*/
2. 测试用例 testcase.c 采用网上流行的版本,代码贴在最后,这里重点介绍大部分网站的代码中的几点错误:
a)testcase.c 中extern int maxi(int i, int j); 连接过程会出错 。 解决方案:将待测函数原型的声明放到头文件中,testcase.c包含此头文件即可
b)网上的代码中,“,”都是中文字符,需要修改为英文字符
3. 测试主文件main.c
a) 代码中“,”都是使用的中文字符,需要使用英文字符替换
b) #include "Basic.h" 编译时找不到头文件。 解决方案:使用#include "CUnit\Basic.h"
c) main函数中 所以的if分支条件 应该为 if(!strcmp("-x", argv[i]))
4. Makefile
a) 所有的冒号都是中文字符,应该修改为英文字符
b) 执行make时候,显示CU_assertImplementation、CU_assertImplementation 等CUnit的函数找不着
原因:makefile中 -lcunit选项放在输入文件之前
修改方案: 将 -lcunit选项放在 输入文件列表之后
c) 做了b)中的修改之后,执行make,显示scrollok、nocbreak、stdscr等符号找不到
原因:CUnit安装没有问题的话,此问题由于gcc编译时没有包含curses库
解决方案: gcc编译时,-lcunit之后 添加 -lcurses
附修改后的example code:
1. 待测函数 max.h max.c
//max.h
#ifndef _MAX_H_H
#define _MAX_H_H
int Max(int i,int j);
#endif
//max