cppunit vs2005 使用

vs2005 如何使用 cppunit 
1.    编译 cppunit
目前在 vs2005 下直接编译 cppunit 工程是编译不过去的。还要对 cppunit 工程做一下适当的改动才能成功编译。
虽然网上有些文章介绍使用 CPPUnitProjectWizard 。这个是编写测试工程的时候使用的,类似win32工程向导。
首先,在对 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 的描述即全面又详细。

你可能感兴趣的:(cppunit vs2005 使用)