一、 编译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. QT做界面真是绝美,并且还可嵌入HTML与JS做界面(许多案例)

    1. 这年头想要酷炫, 还是用web最方便, QT自带嵌入式webkit, 然后用d3.js D3.js - Data-Driven Documents什么的, 各种酷炫的互动表随手而来.这里有各种各 ...

  2. 167. Two Sum II - Input array is sorted

    题目: Given an array of integers that is already sorted in ascending order, find two numbers such that ...

  3. JAVA抽象类与接口

    在Java语言中, abstract class 和interface 是支持抽象类定 义的两种机制.正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力.abstract class和in ...

  4. OLEDB和ODBC的区别(优缺点)

    ODBC是一种连接数据库的开放标准,OLEDB(对象链接和嵌入数据库)位于ODBC层与应用程序之间. 在你的ASP页面里,ADO是位于OLEDB之上的应用程序. 你的ADO调用先被送到OLEDB,然后 ...

  5. 【HDOJ】1197 Specialized Four-Digit Numbers

    水题,暴力可解. #include <iostream> using namespace std; int chg(int n, int base); int main() { int i ...

  6. VM上成功安装mac os x

    想必很多人在intel . AMD上安装苹果系统,总会遇到很多问题,今天我就将我成功安装的过程给大家分享一下. 下面是我在VM上安装的步骤: 1. 准备软件 OS X Snow Leopard 10. ...

  7. JAVA web选型

    Web服务器是运行及发布Web应用的容器,只有将开发的Web项目放置到该容器中,才能使网络中的所有用户通过浏览器进行访问.开发Java Web应用所采用的服务器主要是与JSP/Servlet兼容的We ...

  8. easyui datagrid plunges 扩展 插件

      项目使用 springmvc4.x  spring4.x  hibernate4.x easyui 为了便于开发,扩展了easyui 的 datagrid 功能,下面直接贴上扩展代码: /** * ...

  9. 利用 Dolby® Digital Plus 提供优质音频体验

    John Deutscher Azure媒体服务首席项目经理 随着媒体设备的增多,一项日益增长的需求是,视频流服务能够向用户提供超高音频质量和具有 5.1 环绕音响的优质内容.通过 Azure媒体 ...

  10. [King.yue]Ext.JS 弹出窗体取值赋值

    //从Grid取值 var name = Ext.getCmp(gridGridID).getView().getSelectionModel().getSelection()[0].data.Nam ...