使用CPPUnit执行C/C++单元测试
1、下载CPPUnit
官方地址如下:CppUnit - C++ port of JUnit download | SourceForge.net
https://sourceforge.net/projects/cppunit/
进入官方地址后,首页如下:
点击 【Download】下载即可。
本次项目用了【cppunit-1.13.2.rar】包。
2、CPPUnit使用
①、 CPPUnit结构
目录结构如下:
进入到
cppunit
目录后,可以看到如下目录结构:
config:
配置文件目录;doc:
相关文档目录,需要通过doxygen工具生成,也可以从sourceforge等网站下载打包好的文档;contrib:
contribution,大家贡献的外围代码;examples:
示例代码目录;include:
头文件目录;lib:
存放编译好的库文件;src:
源文件目录,存放源文件及编译库的工程等。
②、 CPPUnit编译
进入到
cppunit/src
目录下,用 vs2013/vs2015/vs2017/vs2019等工具打开
CppUnitLibraries
工程,配置编译参数后开始编译工程,编译成功后,生成的库文件将被拷贝到
lib
目录下。 我们也可以根据需要选择所需的项目进行编译,其中生成目录
Debug
为静态库(
cppunit
),
DebugDll
为动态库(
cppunit_dll
)。生成的库文件说明:
cppunit.lib:
静态库release版;cppunitd.lib:
静态库debug版;cppunit_dll.dll/cppunit_dll.lib:
动态库release版;cppunitd_dll.dll/cppunitd_dll.lib:
动态库debug版;如果生成win32
或x64
版本的库,只要设置vs工具的编译类型,然后重新编译即可。使用过程中,我们把生成的CPPUnit
库文件拷贝到对应的Lib目录中即可
用 vs2013/vs2015/vs2017/vs2019 等打开
cppuint
工程文件。
配置管理器,选择【x64】平台。
编译过程中,如果出现 **
"error MSB3073:命令"
** 错误,则通过 项目的属性->配置属性->生成事件->后期生成事件->命令行 ,设置正确的路径即可。
错误示例
修改配置
删除对应命令行,手动拷贝就可以。
将编译好的
CPPUnit
打包。
③、 CPPUnit概念
在使用
CPPUnit
之前,先简单介绍下
CPPUnit
中的主要类,如果熟悉
CPPUnit
则跳过本部分内容。
**
CPPUnit
核心内容主要包括如下六个方面**
- 测试对象(Test,TestFixture,…): 用于开发测试用例,以及对测试用例进行组织管理;
- 测试结果(TestResult): 处理测试用例执行结果,TestResult与下面的TestListener采用的是观察者模式(Observer Pattern);
- 测试结果监听者(TestListener): TestListener作为TestResult的观察者,担任实际的结果处理角色;
- 结果输出(Outputter): 将结果进行输出,可以制定不同的输出格式;
- 对象工厂(TestFactory): 用于创建测试对象,对测试用例进行自动化管理;
- 测试执行体(TestRunner): 用于运行一个测试。
3、 执行单元测试
①、 创建项目
创建 Visual Studio项目,并设置
CPPUnit
包含、引用路径。
设置包含路径。
设置引用库目录。
②、 编写用例
这里简单列举一个
cppunit
单元测试。
// TestCaseDemo.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "cppunit/TestCase.h"
#include "cppunit/TestResult.h"
#include "cppunit/TestResultCollector.h"
#include "cppunit/TextOutputter.h"
/*---------------------------------------------------------------------
* 定义测试用例;
*--------------------------------------------------------------------*/
class SimpleTestCase :public CppUnit::TestCase
{
public:
void runTest(); //重载基类测试方法;
};
void SimpleTestCase::runTest()
{
int iValue = 1;
CPPUNIT_ASSERT_EQUAL(0, iValue); //验证参数值是否等于零;
}
/*---------------------------------------------------------------------
* 入口函数;
*--------------------------------------------------------------------*/
int main(int argc, char* argv[])
{
CppUnit::TestResult result;
CppUnit::TestResultCollector resultcollecter;
result.addListener(&resultcollecter); //设置结果收集器;
SimpleTestCase test;
test.run(&result);
CppUnit::TextOutputter output(&resultcollecter, std::cout);
output.write(); //标准输出打印结果;
system("pause");
return 0;
}
③、 运行效果
4、 CPPUnit入门指导
可以阅读 《CppUnitCookbook中文版.pdf》 手册,可以快速上手
CppUnit
使用。
版权归原作者 码村长 所有, 如有侵权,请联系我们删除。