CPPUNIT的环境配置和简单示例

最近要使用CPPUNIT做单元测试,在网上找了一些资料后就按照流程走了一遍,现在将过程展示一下:

1.下载CPPUNIT的材料并编译相关工程,获得如下的lib文件和dll文件。进入 CppUnit 1.12.1\src目录下,打开 CppUnitLibraries.dsw,编译其中的几个工程:

cppunit:生成 cppunitd.lib    
cppunit_dll:生成 cppunitd_dll.lib, cppunitd_dll.dll    
TestRunner:生成 testrunnerud.dll, testrunnerud.lib     
TestPlugInRunner:生成 TestPlugInRunnerd.exe
DllPlugInTester: 生成 DllPlugInTesterd.exe

这些生成的文件全部放在LIB文件夹中。下载下来后是dsw的工程,需要用vs2005将其转换成sln工程后再编译。

 

2.将CPPUnitProjectWizard.vsdir  、CPPUnitProjectWizard.vsz这两个文件到vs安装的根目录下面。

这两个文件路径如下:cppunit-1.12.1\CPPUnitProjectWizard

 

3.复制CPPUnitProjectWizard 整个解决方案目录到Microsoft Visual Studio 8\VC\VCWizards\CPPUnitProjectWizard\CPPUnitProjectWizard下

 

4.在vs IDE的菜单栏中按照 工具--->选项---->项目和解决方案------->VC目录中,分别设置CPPUNIT的INCLUDE文件和LIB

文件。

环境基本上就配好了。

 

5.下面是个简单的测试用例:

先建一个基于扩展mfc的动态库工程DemoDll,再新建一个CDemo类(被测试类)
头文件如下:

#pragma once

class AFX_EXT_CLASS  CDemo
{
public:
	CDemo(void);
	~CDemo(void);

public:
	int   Add(int i);
	int   Subtration(int i);
public:       
	int   m_iOper; 
};

 

CPP文件如下:

#include "StdAfx.h"
#include "Demo.h"

CDemo::CDemo(void)
{
	m_iOper = 0;
}

CDemo::~CDemo(void)
{
}

int CDemo::Add(int i)
{
    return m_iOper += i;
}



int CDemo::Subtration(int i)
{
      return m_iOper -= i;
}

在同个一解决方案下新建一个测试工程用于测试这个Demo类
新建一个基于Dialog的工程DemoMfcUnitTest。在项目属性里 链接器->输入->附加依赖

项下输入cppunitd_dll.lib 、testrunnerud.lib(注意是unicode版本)
在App类中 添加下列头文件,如果有重复请删除。

#include "stdafx.h"
#include "DemoMfcUnitTest.h"
#include "DemoMfcUnitTestDlg.h"
#include "TDemoMfc_CDemo.h"

#include "cppunit/extensions/TestFactoryRegistry.h"
#include "cppunit/ui/mfc/TestRunner.h"

 

并在IninInstance()函数中把显示对话框的代码注销掉并在原地曾加下列代码用以显示测试界面。
 
/*CDemoMfcUnitTestDlg dlg;
	m_pMainWnd = &dlg;
	INT_PTR nResponse = dlg.DoModal();
	if (nResponse == IDOK)
	{
		// TODO: 在此处放置处理何时用“确定”来关闭
		//  对话框的代码
	}
	else if (nResponse == IDCANCEL)
	{
		// TODO: 在此放置处理何时用“取消”来关闭
		//  对话框的代码
	}

	// 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,
	//  而不是启动应用程序的消息泵。
	return FALSE;*/

	#if TRUE
	CppUnit::MfcUi::TestRunner runner;      
	CppUnit::TestFactoryRegistry &registry =
	CppUnit::TestFactoryRegistry::getRegistry(CTDemoMfc_CDemo::RegCaseName());

	runner.addTest(registry.makeTest());
	runner.run(); 
#endif
    
	return TRUE;
 
   
#pragma once

#include "cppunit/TestCase.h"

#include "CppUnit/extensions/HelperMacros.h"

#include <string.h>

#include "../CDemo/Demo.h" // 被测试类




class CTDemoMfc_CDemo: public CppUnit::TestCase

{

	// 宏定义

	CPPUNIT_TEST_SUITE(CTDemoMfc_CDemo); // 开始声明一个新的测试程序集

	CPPUNIT_TEST(TestAdd);               // 添加TestAdd测试函数到测试程序集

	CPPUNIT_TEST(TestSubtration);     // 添加TestSubtration测试函数到测试程序集

	CPPUNIT_TEST_SUITE_END();          // 声明结束


public:
	CTDemoMfc_CDemo(void);
	void TestAdd();

	void TestSubtration();

	static  std::string RegCaseName() { return "CTDemoMfc_CDemo";}      


public:
	~CTDemoMfc_CDemo(void);
};
.CPP文件如下:
#include "StdAfx.h"
#include "TDemoMfc_CDemo.h"


#include "cppunit/extensions/TestFactoryRegistry.h"
#include "cppunit/TestAssert.h"

// 对指定程序集进行注册

CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(CTDemoMfc_CDemo,CTDemoMfc_CDemo::RegCaseName());


CTDemoMfc_CDemo::CTDemoMfc_CDemo(void)
{
}

CTDemoMfc_CDemo::~CTDemoMfc_CDemo(void)
{
}

void CTDemoMfc_CDemo::TestAdd()

{

	CDemo  cDemo;

	int iResult = cDemo.Add(10);

	// 宏判断两个值是否相等

	CPPUNIT_ASSERT_EQUAL(iResult,10);

}



void CTDemoMfc_CDemo::TestSubtration()

{

	CDemo  cDemo;

	int iResult = cDemo.Subtration(10);

	// 宏判断两个值是否相等

	CPPUNIT_ASSERT_EQUAL(iResult,-10);

}
最后程序显示界面如下。点击Browse选择要测试的函数后,点击Run即可运行。  


 
   在程序运行的过程中需要在项目工程的属性中的配置属性-->输入-->附加依赖项中cppunitd_dll.lib testrunnerud.lib两个LIB
文件加进去。还要将文件testrunnerud.dll和testrunnerud.lib拷贝到DEBUG目录下。
 

转载于:https://my.oschina.net/myspaceNUAA/blog/13562

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值