分享
 
 
 

试用CppUnit--一个简单的例子

王朝other·作者佚名  2006-03-04
窄屏简体版  字體: |||超大  

用CppUnit其它与用Junit差不多,基本原理是一致的,不过我以为,与Junit相比,配置它稍微麻烦了一点.

(下一篇文章,将介绍cppunit在vc6.0及vc.net下的配置)

我以一个简单的Money类为例

//name:money.h

#ifndef MONEY_H

#define MONEY_H

#include <string>

class Money

{

public:

Money( double amount)

: m_amount( amount )

{

}

double getAmount() const

{

return m_amount;

}

private:

double m_amount;

};

#endif

我们现在需要用Cppunit来测试它的这两个函数-----构造函数和getAmount()函数.

第一步:当然是配置cppunit环境了,这里就不多说了(下面讲的环境是在vc下的)

第二步:利用向导建立一个console application,名字为MoneyApp,编辑项目内的MoneyApp.cpp如下:

// MoneyApp.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include <cppunit/CompilerOutputter.h>

#include <cppunit/extensions/TestFactoryRegistry.h>

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

int main(int argc, char* argv[])

{

// Get the top level suite from the registry

CppUnit::Test *suite = CppUnit::TestFactoryRegistry::getRegistry().makeTest();

// Adds the test to the list of test to run

CppUnit::TextUi::TestRunner runner;

runner.addTest( suite );

// Change the default outputter to a compiler error format outputter

runner.setOutputter( new CppUnit::CompilerOutputter( &runner.result(),

std::cerr ) );

// Run the tests.

bool wasSucessful = runner.run();

// Return error code 1 if the one of test failed.

return wasSucessful ? 0 : 1;

}

第三步:现在才到了我们为Money类写测试的时候了,我们首先新建一个头文件MoneyTest.h,其内容如下:

#ifndef MONEYTEST_H

#define MONEYTEST_H

#include <cppunit/extensions/HelperMacros.h>

class MoneyTest : public CppUnit::TestFixture

{

//其实就是在这里面加入要测试的项目

CPPUNIT_TEST_SUITE( MoneyTest );

CPPUNIT_TEST( testGetAmount );

CPPUNIT_TEST_SUITE_END();

public:

void setUp();

void tearDown();

void testConstructor();

void testGetAmount();

};

#endif // MONEYTEST_H

然后,我们再新建一个cpp文件MoneyTest.cpp,(对了,真正的测试正是在这里面),其内容如下:

#include "stdafx.h"

#include "MoneyTest.h"

#include "Money.h"

//这句很重要,应与前面的"CppUnit::Test *suite = CppUnit::TestFactoryRegistry::getRegistry().makeTest()"对照起来看

// Registers the fixture into the 'registry'

CPPUNIT_TEST_SUITE_REGISTRATION( MoneyTest );

void

MoneyTest::setUp()

{

}

void

MoneyTest::tearDown()

{

}

void

MoneyTest::testConstructor()

{

}

void

MoneyTest::testGetAmount()

{

const double longNumber = 12345678.90123;

Money money ( longNumber);

CPPUNIT_ASSERT_EQUAL( longNumber,money.getAmount());

}

第四步:好了,可以按ctrl+F5跑一下了,运行结果是这样:

.

OK (1)

Press any key to continue

如果想看一看断言失败是什么效果的话,可以这样:

把CPPUNIT_ASSERT_EQUAL( longNumber,money.getAmount());

改为CPPUNIT_ASSERT_EQUAL( 100,money.getAmount());

则运行结果就是这样.

.F

D:\ZHANGYD\MoneyApp\MoneyTest.cpp(38):Assertion

Test name: MoneyTest::testGetAmount

equality assertion failed

- Expected: 100

- Actual : 1.23457e+007

Failures !!!

Run: 1 Failure total: 1 Failures: 1 Errors: 0

Press any key to continue

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有