CUnit的用法
CUnit的用法
CUnit下载地址:?/projects/cunit/
CUnit 在线文档帮助:/doc/index.html
关于CUnit, 本文主要从介绍三方面的内容:
1.CUnit的介绍。
1.1 介绍如何使用CUnit。
CUnit是一个对C语言编写的程序进行单元测试的框架,在线文档说它作为一个静态链接库被链接到用户的测试代码中。它提供了一种简洁的框架来建立测试架构,并提供丰富的断言 Assertion 来测试通用数据类型。除此之外,它还提供了许多不同的结构来运行测试用例和报告测试结果。
1 CUnit的架构 Test Registry | | | Suite '1' . . . . Suite 'N' | | | | | | Test '11' ... Test '1M' Test 'N1' ... Test 'NM'
提到这个框架,为后面如何使用CUnit提供了基础。
先介绍这个框架,从底层往上介绍就两句话:
1 每个测试用例被包装在一个测试包 suite 中,
2 每个测试包 suite 是在有效的测试注册单元 Test Registry 中注册的。
对于CUnit来说,它是单线程运行,所以每次只能有一个有效的测试注册单元 Test Registry ,这个测试注册单元下面可以包含多个测试包 suite ,每个测试包可以拥有多个测试用例。划分测试包 suite 的规则可以自由约定,比如按照模块来划分,一个模块的测试用例集中到一个测试包中 suite 。至于测试用例,则用来测试模块内部的函数。测试用例函数通过提供的各类输入调用被测试的函数,返回执行结果,然后通过CUnit提供的断言来判断被测试的函数是否正确。
2 测试模式
下面是四种测试模式:
1 Automated Output to xml file Non-interactive
2 Basic Flexible programming interface Non-interactive??
3 Console??? Console interface ansi C Interactive??
4 Curses Graphical interface Unix Interactive
第一种模式是将结果输出到XML文档中,便于生成报告。第二种模式是每一次运行结束之后在standard output中显示测试结果,不能保留测试结果数据。第三种模式是console方式的,可以人机交互;前两种模式是非交互式的。第四种只在Unix中使用。
3 测试的基本流程
1 编写单元测试函数 有必要的话要写suite的init/cleanup函数 。Write functions for tests and suite init/cleanup if necessary .?
2 调用函数CU_initialize_registry 初始化测试注册单元 Test Registry 。 Initialize the test registry - CU_initialize_registry 3 调用函数CU_add_suite 将测试包 suite 添加到测试注册单元 Test Registry 中。Add suites to the test registry - CU_add_suite 4 调用函数CU_add_test 将测试用例添加到测试包 suite 中。Add tests to the suites - CU_add_test 5 使用合适的接口来运行测试用例。Run tests using an appropriate interface, e.g. CU_console_run_tests?
6 调用函数CU_cleanup_registry清除测试注册单元 Test Registry 。Cleanup the test registry - CU_cleanup_registry
1.2 通过一个例子来说明使用方法。
先说明文件的组织结构:
1.被测试的模块:
1 文件MainModule.c,定义了一个求和函数cal_num。
2 头文件MainModule.h,声明了求和函数cal_num。
2.测试用例和测试包
1 文件TestMainModule.c,定义了测试用例。
3.单元测试运行入口
1 文件CUnitRunTest.c
各个文件的内容如下:
【1】MainModule.h
[cpp]?view plaincopy
#ifndef?__MAIN_MODULE_H__??
#define?__MAIN_MODULE_H__??
#include //计算两个数之和??
int?cal_num int?a