VS2005配置CPPUnit进行单元測试
一、 编译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”。
VS2005配置CPPUnit进行单元測试的更多相关文章
- C语言单元測试
C语言单元測试 对于敏捷开发来说,单元測试不可缺少,对于Java开发来说,JUnit非常好,对于C++开发,也有CPPUnit可供使用,而对于传统的C语言开发,就没有非常好的工具可供使用,能够找到的有 ...
- Android下的单元測试
android下的单元測试 在AndroidManifest.xml文件里配置下面信息: 在manifest节点下加入: <!-- 指定測试信息和要測试的包 --> <instrum ...
- 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 ...
- SonarQube4.4+Jenkins进行代码检查实例之三-单元測试分析
作者:张克强 作者微博:张克强-敏捷307 在 <SonarQube4.4+Jenkins进行代码检查实例之中的一个> 中介绍了不编译仅仅检查的方式. 在<SonarQube4 ...
- Android studio及eclipse中的junit单元測试
转载请标明出处:http://blog.csdn.net/nmyangmo/article/details/51179106 前一段时间有人问我单元測试的相关内容,我稍作总结做日志例如以下: 由于我接 ...
- (4.5.4)Android測试TestCase单元(Unit test)測试和instrumentationCase单元測试
Android单元和instrumentation单元測试 Developing Android unit and instrumentation tests Android的单元測试是基于JUnit ...
- 玩转单元測试之WireMock -- Web服务模拟器
WireMock 是一个灵活的库用于 Web 服务測试,和其它測试工具不同的是.WireMock 创建一个实际的 HTTPserver来执行你的 Web 服务以方便測试. 它支持 HTTP 响应存根. ...
- 【Android进阶】Junit单元測试环境搭建以及简单有用
单元測试的目的 首先.Junit单元測试要实现的功能,就是用来測试写好的方法是否可以正确的运行,一般多用于对业务方法的測试. 单元測试的环境配置 1.在AndroidManifest清单文件的Appl ...
- 使用maven运行单元測试总结
maven本身没有单元測试框架,可是maven的default生命周期的test阶段绑定了maven-surefire-plugin插件,该插件能够调用Junit3.Junit4.TestNG等Jav ...
随机推荐
- 年度十佳 DevOps 博客文章(前篇)
如果说 15 年你还没有将 DevOps 真正应用起来,16 年再不实践也未免太落伍了.国内 ITOM 领军企业 OneAPM 工程师为您翻译整理了,2015 年十佳 DevOps 文章,究竟是不是深 ...
- HDU3368+枚举
题意看不懂的直接看百度百科对黑白棋的解释... 做法:分情况讨论,一共8个方向. /* 搜索 */ #include<stdio.h> #include<string.h> ; ...
- Android ListView(Selector 背景图片 全选 Checkbox等按钮)
list_item.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xm ...
- asp.net 弹出式日历控件 选择日期 Calendar控件
原文地址:asp.net 弹出式日历控件 选择日期 Calendar控件 作者:逸苡 html代码: <%@ Page Language="C#" CodeFile=&quo ...
- android viewpager change adapter ---在使用viewpager设置新的adapter的时候发现页面还是显示旧的adapter中的值
有一个需求是当用户选择navigationview中的某一项时,右边的viewpager需要动态切换不同的adapter 发现直接setAdapter没有任何反应,加载的数据还是旧的数据 折腾了半天只 ...
- Java-Swing嵌入浏览器(一)
今天要说的额是浏览器的第一个版本是用DJnative-swt和swt包开发的调用本地浏览器和webkit浏览器的示例 这是我的工程目录[源码见最后]: src下为写的源码,lib为引入的swt和DJn ...
- java比较器Comparable接口和Comaprator接口
Comparable故名思意是比较,意思就是做比较的,然后进行排序. 1.什么是comparable接口 此接口强行对实现它的每个类的对象进行整体排序.此排序被称为该类的自然排序 ,类的 compar ...
- 关于HSL和HSV颜色空间的详细论述
目前在计算机视觉领域存在着较多类型的颜色空间(color space).HSL和HSV是两种最常见的圆柱坐标表示的颜色模型,它重新影射了RGB模型,从而能够视觉上比RGB模型更具有视觉直观性. HSV ...
- PHP 'ext/gd/gd.c'信息泄漏漏洞
漏洞版本: PHP 5.5.x 漏洞描述: CVE ID:CVE-2014-2020 PHP是一种HTML内嵌式的语言. PHP 'ext/gd/gd.c'没有检查数据类型,允许远程攻击者使用字符串或 ...
- jquery easyui treegrid使用小结
在实际应用中可能会碰到不同的需求,比如会根据每行不同的参数或属性设置来设置同列不同的editor类型,这时原有的例子就显的有点太过简单,不能实现我们的需求,现在应用我在项目中的操作为例,显示下实现同列 ...