CUnit - A Unit Test Framework For C
2009-01-19 20:42
459 查看
(C)2009 蒋维
最近项目组想把用了一段时间的中间件API做一个单体测试,找了半天没有找到一个好的测试方法。最开始打算手动写点用力然后逐条测,但是log信息不好整理。突然发现CUnit这个东东。研究了一下。
继JUunit CppUnit的成功后, C语言环境下也出现了开放源码的白盒测试框架CUnit。CUnit在LGPL协议下以源代码形式提供给用户使用,用户可以编写程序时加入框架代码或直接链接编译好的静态库。它提供了一个简单的单元测试框架,并且为常用的数据类型提供了丰富的断言语句支持。 目前稳定版本为:CUnit-2.1-0。
由于这个东东基于LGPL所以我们就不能直接用它的源代码了(不然老板会杀了我的:))。所以只能给编成静态库来调用了(这下老板就happy了)。但是默认提供的Makefile在Linux下只能用gcc编译成库。和我们项目的的交叉编译环境的目标机硬件环境不兼容。还好有CUnit的源文件不多,手动用目标机的编译器编译成了库文件。这下用起来就happy多了,直接在工程里面加上库。
CUnit的组织结构如下图:
每个CUnit实例只能有一个Registy存在。
每个Registy能够注册多个Suit(从代码来看好像是255个,记不清楚了…)。Suit映射到项目就可以是各个模块。
最后每个Suit又可住注册多个手工写好的Case。也就是要测试的API用例。
用例注册一般是下面几步:
1.初始化框架
2.初始化Registy
3.向Registy注册Suit
4.向Suit注册Case
5.运行CUnit
6.清理资源
这些注册步骤基本上都是固定的,CUnit里面自带了一个sample写的很完整,很容易掌握。然后再多用两遍一下就熟悉了。
CUnit提供了四种测试模式:
1.Basic
2.Automated
3.Console
4.Cursor
Basic模式是直接将注册过的用例依次跑一遍,并且在标准输出中输出测试结果。
Automated模式将所用用例一次跑一遍,并且生成非常直观的XML文件格式的测试结果。
Console是控制台交互模式有一些简单的选项,比如选择个别用例测试。
Cursor我也没有用过这个模式,CUnit说是unix下专用模式,空了的时候试试。
最为一个单体测试框架CUnit并没有直接提供给你一个完整的测试用例,而是在手工编写的用例基础上实现自动调用。对于一些异步的API需要延时。总体来说我觉得对于中小规模的项目还是比较实用。
ps: Automated生成的XML文件需要源代码share目录下面的几个dtd和xsl文件配合才能正常显示。第一次我没有注意这个,生成的报告一个都看不了…
以上
蒋维
最近项目组想把用了一段时间的中间件API做一个单体测试,找了半天没有找到一个好的测试方法。最开始打算手动写点用力然后逐条测,但是log信息不好整理。突然发现CUnit这个东东。研究了一下。
继JUunit CppUnit的成功后, C语言环境下也出现了开放源码的白盒测试框架CUnit。CUnit在LGPL协议下以源代码形式提供给用户使用,用户可以编写程序时加入框架代码或直接链接编译好的静态库。它提供了一个简单的单元测试框架,并且为常用的数据类型提供了丰富的断言语句支持。 目前稳定版本为:CUnit-2.1-0。
由于这个东东基于LGPL所以我们就不能直接用它的源代码了(不然老板会杀了我的:))。所以只能给编成静态库来调用了(这下老板就happy了)。但是默认提供的Makefile在Linux下只能用gcc编译成库。和我们项目的的交叉编译环境的目标机硬件环境不兼容。还好有CUnit的源文件不多,手动用目标机的编译器编译成了库文件。这下用起来就happy多了,直接在工程里面加上库。
CUnit的组织结构如下图:
每个CUnit实例只能有一个Registy存在。
每个Registy能够注册多个Suit(从代码来看好像是255个,记不清楚了…)。Suit映射到项目就可以是各个模块。
最后每个Suit又可住注册多个手工写好的Case。也就是要测试的API用例。
用例注册一般是下面几步:
1.初始化框架
2.初始化Registy
3.向Registy注册Suit
4.向Suit注册Case
5.运行CUnit
6.清理资源
这些注册步骤基本上都是固定的,CUnit里面自带了一个sample写的很完整,很容易掌握。然后再多用两遍一下就熟悉了。
CUnit提供了四种测试模式:
1.Basic
2.Automated
3.Console
4.Cursor
Basic模式是直接将注册过的用例依次跑一遍,并且在标准输出中输出测试结果。
Automated模式将所用用例一次跑一遍,并且生成非常直观的XML文件格式的测试结果。
Console是控制台交互模式有一些简单的选项,比如选择个别用例测试。
Cursor我也没有用过这个模式,CUnit说是unix下专用模式,空了的时候试试。
最为一个单体测试框架CUnit并没有直接提供给你一个完整的测试用例,而是在手工编写的用例基础上实现自动调用。对于一些异步的API需要延时。总体来说我觉得对于中小规模的项目还是比较实用。
ps: Automated生成的XML文件需要源代码share目录下面的几个dtd和xsl文件配合才能正常显示。第一次我没有注意这个,生成的报告一个都看不了…
以上
蒋维
相关文章推荐
- testngpp - next generation unit test framework for c/c++
- HowTo for CppUnit TestFramework
- Symbian OS Unit Test Framework
- [Android]Unit Test for Android
- 使用 Visual Studio 2005 Team System 进行单元测试并生成用于 Unit Test Framework 的源代码
- 在 Visual Studio 单元测试中使用CallContext 导致的 Unit Test Adapter threw exception: Type is not resolved for member... 异常
- 使用 Visual Studio 2005 Team System 进行单元测试并生成用于 Unit Test Framework 的源代码
- 升级AndroidStudio3.0 Unable to resolve dependency for ':app@betaUnitTest/compileClasspath问题解决
- Unit Test for T-SQL(ZT)
- CodeSign error: code signing is required for product type 'Unit Test Bundle' in SDK 'iOS 8.1'
- How to write unit test for CommonsMultipartFile with Mock
- PHP Unit Testing & Mock Objects with SimpleTest plugin for Eclipse
- 使用 Visual Studio 2005 Team System 进行单元测试并生成用于 Unit Test Framework 的源代码
- [Junit]Understanding unit test framework
- 使用 Visual Studio 2005 Team System 进行单元测试并生成用于 Unit Test Framework 的源代码
- Code signing is required for product type Unit Test Bundle in SDK iOS 8.0
- How to Write a Simple UnitTest Framework
- c语言实现一个单元测试框架(Unit Test Framework)代码
- 升级AndroidStudio3.0 Unable to resolve dependency for ':app@betaUnitTest/compileClasspath': Could not
- Create a simple unit test project with Visual Studio Unit Testing Framework