一、 编译CPPUnitproject

1、  解压文件cppunit-1.12.1.tar.gz。

2、  编译$BASE/src/cppunit/CppUnitLibraries.dsw中的cppunit_dll项目。这是CPPUnit基本类库。Release和debug版本号须要同一时候编译。

3、  编译$BASE/src/cppunit/CppUnitLibraries.dsw中的TestRunner项目。这是使用MFC的图形化界面的类库。Release和debug版本号须要同一时候编译。

注意:若使用VS2005编译,可能出现:

error C1104: fatal error importing libid: '80cc9f66-e7d8-4ddd-85b6-d9e6cd0e93e2'

错误提示。仅仅须要将当中7.0改为相应版本号,比方8.0,又一次编译就可以。

4、  将编译生成的*.lib 和 *.dll 复制到目标程序运行文件夹下,在stdafx.h中添加例如以下代码:

#ifndef _DEBUG

#pragma comment(lib, "..//Debug//cppunit_dll.lib")

#pragma comment(lib, "..//Debug//TestRunner.lib")

#else

#pragma comment(lib, "..//Release//cppunit_dll.lib")

#pragma comment(lib, "..//Release//TestRunner.lib")

#endif

5、  通过菜单[Tools]à[Options],弹出对话框。Projects and Solutions中添加Include Files为$BASE/include。

二、 不使用辅助宏的CPPUnit用法

1、  新建一个基于对话框的MFC程序。

project名为CPPUnit。

2、  依照第一步的4、5步骤(也能够直接在project中设置),使程序包括CPPUnit的头文件和编译时须要的*.lib文件。

以及执行时须要的*.dll文件。

3、  添加C++类,CPlusTest,代码例如以下:

.h 文件

view plaincopy to clipboardprint? 

#pragma once   

#include <cppunit/TestFixture.h>   

#include <cppunit/TestAssert.h>   

class CPlusTest : public CppUnit::TestFixture   

{   

public:   

    CPlusTest(void);   

    virtual ~CPlusTest(void);   

    void setUp();   

    void tearDown();   

    void TestEqual1();   

    void TestEqual2();   

private:   

    int x;   

    int y;   

};  

#pragma once

#include <cppunit/TestFixture.h> 

#include <cppunit/TestAssert.h>

class CPlusTest : public CppUnit::TestFixture 



public: 

    CPlusTest(void); 

    virtual ~CPlusTest(void);

void setUp(); 

    void tearDown(); 

    void TestEqual1(); 

    void TestEqual2();

private: 

    int x; 

    int y; 

};

.cpp 文件

view plaincopy to clipboardprint? 

#include "StdAfx.h"   

#include "PlusTest.h"   

CPlusTest::CPlusTest(void)   

{   

}   

CPlusTest::~CPlusTest(void)   

{   

}   

void CPlusTest::setUp()   

{   

    x = 1;   

    y = 2;   

}   

void CPlusTest::tearDown()   

{   

    x = 0;   

    y = 0;   

}   

void CPlusTest::TestEqual1()   

{   

    CPPUNIT_ASSERT(x + y == 4);   

}   

void CPlusTest::TestEqual2()   

{   

    CPPUNIT_ASSERT(x + y == 3);   

}  

#include "StdAfx.h" 

#include "PlusTest.h"

CPlusTest::CPlusTest(void) 



}

CPlusTest::~CPlusTest(void) 



}

void CPlusTest::setUp() 



    x = 1; 

    y = 2; 

}

void CPlusTest::tearDown() 



    x = 0; 

    y = 0; 

}

void CPlusTest::TestEqual1() 



    CPPUNIT_ASSERT(x + y == 4); 

}

void CPlusTest::TestEqual2() 



    CPPUNIT_ASSERT(x + y == 3); 

}

说明:

1)  測试类一般继承自TestFixture,它用来表示一个測试对象,用来组织測试用例。

2)  在每一个測试用例运行之前。其所属类的setUp都会运行。之后,其所属类的tearDown都会运行。对本例而言。运行TestEqual1之前会运行setUp,之后会运行tearDown;运行TestEqual2之前也会运行setUp,之后也会运行tearDown。

3)  CPPUNIT_ASSERT用来推断括号内的值是true或者false。假设true,则表示測试成功;否则表示測试失败。

也有一些别的宏能够使用。

4、  在CPPUnit.cpp中增加下面头文件:

#include <cppunit/ui/mfc/TestRunner.h>

#include <cppunit/testCaller.h>

#include <cppunit/TestSuite.h>

#include <cppunit/TestResult.h>

在InitInstance()函数中增加下面代码:

view plaincopy to clipboardprint? 

CppUnit::MfcUi::TestRunner runner;   

CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("test");   

CppUnit::TestCaller<CPlusTest>*pTest1=new CppUnit::TestCaller<CPlusTest>("TestEqual1", &CPlusTest::TestEqual1);   

CppUnit::TestCaller<CPlusTest>*pTest2=new CppUnit::TestCaller<CPlusTest>("TestEqual2", &CPlusTest::TestEqual2);   

pSuite->addTest(pTest1);   

pSuite->addTest(pTest2);   

runner.addTest(pSuite);   

runner.run();  

CppUnit::MfcUi::TestRunner runner;

CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("test");

CppUnit::TestCaller<CPlusTest>*pTest1=new CppUnit::TestCaller<CPlusTest>("TestEqual1", &CPlusTest::TestEqual1);

CppUnit::TestCaller<CPlusTest>*pTest2=new CppUnit::TestCaller<CPlusTest>("TestEqual2", &CPlusTest::TestEqual2);

pSuite->addTest(pTest1);

pSuite->addTest(pTest2); 

runner.addTest(pSuite);

runner.run();

说明:

1)       test suite和test case分别相应着树枝和树叶,runner相应着树根。test suite能够包括别的test suite,runner也能够直接包括test case。

2)       TestRunner、TestSuite 、TestCaller删除子集合的时候都使用delete,子集合都应该使用new 分配,然后加入到子集合中。

5、 删除显示对话框的代码!执行后显示界面为:

图1.1 CPPUnit执行界面

三、 使用辅助宏的CPPUnit用法

上述的方法在主函数中做大量加入test suite和test case的操作。操作比較烦琐,为了简化,CPPUnit提供了一些宏。

1、  改进測试类,加入下面代码:

CPPUNIT_TEST_SUITE(CPlusTest);

CPPUNIT_TEST(TestEqual1);

CPPUNIT_TEST(TestEqual2);

CPPUNIT_TEST_SUITE_END();

说明:

1)       要在类的最开头。即public前面加上这些语句。

该类的TestEqual1和TestEqual2分别作为一个test case放在一个test suite中。该test suite的名称是类的名称,即“CPlusTest”。

2)       #include <cppunit/TestFixture.h>

#include <cppunit/extensions/HelperMacros.h>

2、  測试类相应的CPP文件開始增加:

CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(CPlusTest, "plusTest");

说明:表示加入该类相应的suite(“CPlushTest”)到一个名字是plusTest的test suite。同一时候plusTest这个test suite会被注冊。另外,也能够使用

CPPUNIT_TEST_SUITE_REGISTRATION(CPlusTest);

将该类相应的suite增加到默认的test suite中(“All Tests”)。

3、  在Initance()函数中增加例如以下代码:

CppUnit::MfcUi::TestRunner runner;

CppUnit::Test* pSuite = CppUnit::TestFactoryRegistry::getRegistry("plusTest").makeTest();

runner.addTest(pSuite);

runner.run();

说明:

图形化界面中包括了三层树结构。第一层是plusTest,第二层是CPlusTest。第三层是TestPlus1和TestPlus2。能够给getRegistry不指定參数使用默认注冊的test case,即“All Tests”。

转自:http://qiusuoge.com/7660.html

VS2005配置CPPUnit进行单元測试的更多相关文章

  1. C语言单元測试

    C语言单元測试 对于敏捷开发来说,单元測试不可缺少,对于Java开发来说,JUnit非常好,对于C++开发,也有CPPUnit可供使用,而对于传统的C语言开发,就没有非常好的工具可供使用,能够找到的有 ...

  2. Android下的单元測试

    android下的单元測试 在AndroidManifest.xml文件里配置下面信息: 在manifest节点下加入: <!-- 指定測试信息和要測试的包 --> <instrum ...

  3. iOS单元測试:Specta + Expecta + OCMock + OHHTTPStubs + KIF

    框架选择 參考这篇选型文章,http://zixun.github.io/blog/2015/04/11/iosdan-yuan-ce-shi-xi-lie-dan-yuan-ce-shi-kuang ...

  4. SonarQube4.4+Jenkins进行代码检查实例之三-单元測试分析

    作者:张克强    作者微博:张克强-敏捷307 在 <SonarQube4.4+Jenkins进行代码检查实例之中的一个> 中介绍了不编译仅仅检查的方式. 在<SonarQube4 ...

  5. Android studio及eclipse中的junit单元測试

    转载请标明出处:http://blog.csdn.net/nmyangmo/article/details/51179106 前一段时间有人问我单元測试的相关内容,我稍作总结做日志例如以下: 由于我接 ...

  6. (4.5.4)Android測试TestCase单元(Unit test)測试和instrumentationCase单元測试

    Android单元和instrumentation单元測试 Developing Android unit and instrumentation tests Android的单元測试是基于JUnit ...

  7. 玩转单元測试之WireMock -- Web服务模拟器

    WireMock 是一个灵活的库用于 Web 服务測试,和其它測试工具不同的是.WireMock 创建一个实际的 HTTPserver来执行你的 Web 服务以方便測试. 它支持 HTTP 响应存根. ...

  8. 【Android进阶】Junit单元測试环境搭建以及简单有用

    单元測试的目的 首先.Junit单元測试要实现的功能,就是用来測试写好的方法是否可以正确的运行,一般多用于对业务方法的測试. 单元測试的环境配置 1.在AndroidManifest清单文件的Appl ...

  9. 使用maven运行单元測试总结

    maven本身没有单元測试框架,可是maven的default生命周期的test阶段绑定了maven-surefire-plugin插件,该插件能够调用Junit3.Junit4.TestNG等Jav ...

随机推荐

  1. POJ 2195 Going Home(最小费用最大流)

    http://poj.org/problem?id=2195 题意 :  N*M的点阵中,有N个人,N个房子.让x个人走到这x个房子中,只能上下左右走,每个人每走一步就花1美元,问当所有的人都归位了之 ...

  2. 【POJ1182】 食物链 (带权并查集)

    Description 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到 ...

  3. UVA 125 Numbering Paths

    题目大意:给定n条单向边,求图中任意两点的连通路径的数目.其中点是从0-输入中出现的最大的点. 可以用floyd-warshall算法或者dfs. for(int k = 0; k < n; k ...

  4. 李洪强iOS开发本人集成环信的经验总结_02_基本配置

     李洪强iOS开发本人集成环信的经验总结_02_基本配置 来到APPdelegate中做一些配置 01 - 导入头文件 02 - 在didFinishLaunchingWithOptions用法总结 ...

  5. DHTMLX 前端框架 建立你的一个应用程序 教程(七)-- 添加筛选功能

    表格的过滤筛选 我们在每列第一行添加一个文本,用做数据的条件筛选. 我们还提供服务端的筛选 ,当有大量数据时 , 我们可以使用dhtmlxConnector 进行后台数据的筛选. 添加过滤器到表格列中 ...

  6. Android开发中一些被冷落但却很有用的类和方法

    MediaMetadataRetriever 顾名思义,就是用来获取媒体文件一些相关信息的类.包括一首歌的标题,作者,专辑封面和名称,时长,比特率等等.如果是视频的话,可以获取视频的长宽,预览图. h ...

  7. Spring顶级项目以及Spring cloud组件

    作为java的屌丝,基本上跟上spring屌丝的步伐,也就跟上了主流技术. spring 顶级项目: Spring IO platform:用于系统部署,是可集成的,构建现代化应用的版本平台,具体来说 ...

  8. 为什么要重写equals()方法与hashCode()方法

    在java中,所有的对象都是继承于Object类.Ojbect类中有两个方法equals.hashCode,这两个方法都是用来比较两个对象是否相等的. 在未重写equals方法我们是继承了object ...

  9. scaleform 注意事项

    在使用 自带的UI .fla 里面的组建时 需要把自己建立的fla进行如下设置.  文件-发布设置-flash-脚本actionscript3.0设置——舞台:自动声明舞台实例    

  10. WordPress OptimizePress插件任意文件上传漏洞

    漏洞版本: WordPress OptimizePress Plugin 1.x 漏洞描述: WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设 ...