51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 6557|回复: 2
打印 上一主题 下一主题

在vs2005如何使用cppunit

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2008-3-7 17:22:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本文转自jinjunmax_78的专栏  


1.    编译cppunit

目前在vs2005下直接编译cppunit工程是编译不过去的。还要对cppunit工程做一下适当的改动才能成功编译。

虽然网上有些文章介绍使用CPPUnitProjectWizard。但是我查阅了相关资料:发现其实不用安装这个CPPUnitProjectWizard。也可以在vs2005下成功编译和链接Cppunit。

首先,在对CppUnitLibraries解决方案做编译之前,需要在硬盘的cppuint目录下新建一个与src文件夹同级的lib文件夹。在1.12.0版本下这个问题已经解决。但是在1.12之前的版本还需要手动去建lib文件夹 。

其次:在编译TestRunner这个工程之前,需要先对MsDevCallerListCtrl.cpp文件做一下更改。将

#import "libid:80cc9f66-e7d8-4ddd-85b6-d9e6cd0e93e2" version("7.0") lcid("0") raw_interfaces_only named_guids

改为

#import "libid:80cc9f66-e7d8-4ddd-85b6-d9e6cd0e93e2" version("8.0") lcid("0") raw_interfaces_only named_guids

这样将会从"%common_files%\MicrosoftShared\MSEnv\dte80a.olb"导入 dte80a.olb.

最后,将DSPlugIn这个工程从解决方案里删掉,因为它只支持vc6.0。做过这些处理后vs2005就应该可以成功编译cppunit。

2.    vs2005下的环境配置

开发环境中,在vs2005的工具菜单下选项->项目和解决方案- > vc++目录设置好Include 和Lib引用路径。例如:在包含文件选项下加入C:\cppunit\lib 。在库文件选项下加C:\cppunit\include 。另外最好在计算机的系统环境变量下将lib路径添加到path变量下,这样就不用把dll拷来拷去。

3.    一个基于GUI的界面测试程序的例子

首先建一个基于扩展mfc的动态库工程DemoDll。

再新建一个CDemo类(被测试类)

头文件

#pragma once



class AFX_EXT_CLASS CDemo

{

public:

    CDemo(void);

    virtual ~CDemo(void);

    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 、testrunnerd.lib (DEBUG)或cppunit_dll.lib 、testrunner.lib (Release) 并需要将被测试类的头文件路径添加到项目属性里c/c++->附加包含目录里。例如:..\ DemoDll。同时在项目依赖项中把Demodll设为依赖项。另外,要注意保证这两个工程的输出目录相同。

在App类中 添加下列头文件

#include "cppunit/extensions/TestFactoryRegistry.h"

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

#include "TDemoMfc_CDemo.h"              // 测试用例类头文件

并在IninInstance()函数中把显示对话框的代码注销掉并在原地曾加下列代码用以显示测试界面。

CppUnit::MfcUi::TestRunner runner;      

       CppUnit::TestFactoryRegistry &registry = CppUnit::TestFactoryRegistry::getRegistry(CTDemoMfc_CDemo::RegCaseName());

    runner.addTest(registry.makeTest());

    runner.run();

       return true;

之后构建一个测试用例类。

头文件:

#pragma once



#include "cppunit/TestCase.h"

#include "CppUnit/extensions/HelperMacros.h"

#include <string.h>

#include "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);

}

最后编译并运行这个工程就会看到CppUnit的GUI测试界面。

关于Cppunit详细的介绍,可以访问http://morningspace.51.net/resource/cppunit/cppunit_anno.html。这上面对cppunit的描述即全面又详细。

[ 本帖最后由 eugenedu 于 2009-1-9 14:40 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2008-7-21 22:04:46 | 只看该作者
楼主是ZTE的?呵呵,如果是C++开发,建议使用CxxTest。
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2009-1-9 17:25:27 | 只看该作者
希望对大家有帮助 也希望在这里共同探讨和解决使用中所遇到的问题。

[ 本帖最后由 eugenedu 于 2009-1-9 17:26 编辑 ]
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-24 02:06 , Processed in 0.066888 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表