标题：汉庭
集团介绍
在成功完成“携程旅行网”和“如家酒店连锁”联合创始人的使命后，他开始打造一个为商务人士量身定制的酒店品牌，一个他心目中最优秀的“中国服务”品牌。 
目前，汉庭旗下有“汉庭全季酒店”、“汉庭快捷”和“汉庭海友客栈”三大品牌。
汉庭大多地处城市的商务中心或交通便利之处。汉庭产品遵循简洁、现代、方便环保的设计原则。除了经过精心挑选的符合人体工学的床垫、独特的荞麦双面枕头以及舒适的床上用品外，客人感受最深的还有汉庭既方便又免费的宽带网络服务：除了在每间客房的写字台和床头均布置有网络端口，而且在酒店的公共区域还覆盖了无线宽带。汉庭想为你提供一个有书房的家，让每位入住汉庭的客人既能感受到家一般的温馨服务，还能在汉庭精心准备的“商务空间”里方便地处理企业事务。 
汉庭酒店集团是中国高速成长的新兴酒店集团，自2005年创立以来已经完成了全国主要城市的布局，并重点在长三角、环渤海湾、珠三角和中西部发达城市形成了密布的酒店网络。 
2010年3月26日，汉庭在美国纳斯达克以ADR形式上市，当日收于13.92美元。
近日，汉庭酒店集团宣布正式更名为“华住酒店集团”，旗下5大品牌也有所更名，分别是禧玥酒店、全季酒店、星程酒店、汉庭酒店和海友酒店。这是继汉庭Q3财报净利润超六成、单季开店数夺冠等利好消息后又一大动作。
汉庭相关人员透露，“华住”取“中华住宿”之意，目标剑指中华住宿业的世界级酒店集团，作为知名连锁酒店品牌，汉庭的经济型酒店形象已深入人心，一个全新的集团名称能更好地诠释和管理高、中、低不同档次的酒店品牌形象，今后汉庭只作为其中一个品牌名称来运用。
业内人士表北京汉庭酒店五道口位置本数据来源于百度地图，最终结果以百度地图数据为准。示，华住之名简洁大气，汉庭迈向世界级酒店集团的雄心可见一斑，且有脉络可寻。从2005年第一家酒店营业发展至今已拥有全国1000多家门店遍布100多座城市，2010年跻身全球酒店集团25强，年初汉庭创始人季琦回归掌舵，开启一系列蜕变，包括明晰多品牌、全系列战略、完成中端市场布局、高端品牌禧玥筹建等在内，更名后集团旗下各品牌形象饱满，相互之间有一定区隔，与国际上做法通行，例如法国雅高集团旗下就拥有索菲特、美居、宜必思等子品牌。
华住酒店集团创始人、董事长季琦认为，中国酒店业将迎来新一轮的黄金十年，即使是已被认定为“红海”的中国经济型酒店市场与美国等发达国家相比依旧供需潜能巨大，因此，未来全球酒店集团5强出现“中国面孔”绝对不是梦想，而是必然趋势。
此外，原汉庭酒店集团旗下子品牌名称也有所调整，“海友客栈”更名为“海友酒店”，更能匹配年轻时尚的客人和现代设计风格，具备价值感；“汉庭快捷酒店”更名为“汉庭酒店”，汉庭不再是集团名称，经济型酒店定位更明确，无须附加快捷二字。
汉庭发展
2005年初，汉庭在中国正式创立，同年8月，第1家门店开业。2006年底，汉庭连锁酒店第34家开业。2007年7月，汉庭以股权融资8500万美元创下中国服务行业首轮融资的新纪录，2007年底，汉庭连锁酒店第74家开业。2008年底，汉庭在全国开业门店数达到近200家，签约门店总数近250家。完成了全国主要城市的布局，并重点在长三角、环渤海湾、珠三角和中西部发达城市形成了密布的酒店网络，成为国内成长最快的连锁酒店品牌之一。 
2008年2月，汉庭酒店集团正式成立，是国内第一家多品牌的经济型连锁酒店集团。汉庭致力于实现“中国服务”的理想，即打造世界级的中国服务品牌。汉庭的愿景是“成为世界住宿业领先品牌集团”，为此，汉庭不断追求精细化的管理，实施标准化的体系和流程，更全面、更迅速地推进集团化发展。汉庭酒店集团旗下目前拥有“汉庭快捷”、“汉庭全季酒店”、“汉庭海友客栈”三个系列品牌，汉庭坚持时尚现代、便捷舒适、高性价比的优势特点，力争塑造中国经济型酒店的典范。
汉庭第一家：“开在昆山火车站”　
2005年初，季琦又创建了一个“汉庭”的品牌，他开始挥师进军“中档连锁酒店”。这个被业界戏称为从创业“美女”到创业“仙女”的持续创业者，在一手创办了携程和如家后，又将重心落在了中档酒店品牌——汉庭酒店的打造上。 　季琦表示，相对于如家的“干净、经济、温馨”的口号，汉庭以“现代、舒适、超值”的特点来区分。他希望通过提供更宽大的床和办公区域、豪华淋浴以及免费宽带等，来拉开与莫泰168、如家之间的差距，开拓一片新的市场。 　第一家汉庭酒店，季琦选择在江苏昆山火车站，“昆山是苏州经济开发区，商务交流频繁，而火车站又是一个城市人流量大的地区，如果这里能成功，那么汉庭在全国都能成功。”后来的结果证明了季琦的判断，“汉庭在昆山火车站的分店今天依旧是汉庭最挣钱的分店之一。”
未来愿景：“明年再开100家汉庭酒店”　
季琦表示，汉庭今年获得的第二笔5500万美元的融资已经到位，下半年资本市场紧缩，所以资金的流向会集中到一些优质的企业。种种迹象表明，品牌经济型酒店依然被资本青睐。 　据悉，2008年汉庭新开酒店数量已经从原本计划的160家减到100家，而明年扩张速度与此相近，新开酒店依然保持在100家左右，以定位标准经济型酒店的汉庭快捷为主，同时“也有计划收购其他酒店。” 　季琦表示，目前中国城市化进程正在加快，预计到2010年中国城市人口大约有6亿。“连锁住宿业必然会有很大市场，将汉庭打造成消费者出行的首选酒店，是我们目前的最大目标之一。” 　汉庭快捷酒店，既是您旅途中温馨的家，又是出差在外的办公室。
三大品牌
汉庭快捷最便捷的住宿体验
汉庭快捷酒店是汉庭连锁酒店旗下品牌，致力于为商旅客人提供便捷的住宿体验。酒店安心的睡眠系统、  汉庭快捷酒店现代的卫浴系统、便捷的商旅配套和典雅的酒店氛围保障您出门在外也有在家一般的感受。精心设计的十大免费项目：商务区电脑、打印复印传真、宽带上网、大堂茶水咖啡、房间阅读书籍、停车、早餐、矿泉水、茶包、大堂书吧，为你提供最物超所值的服务。汉庭全季  汉庭全季最优质地段的选择
汉庭全季是汉庭连锁酒店旗下品牌，原来的汉庭酒店，致力于为部分商旅客人提供最优值地段的选择。汉庭酒店多坐落于城市商业中心的标志性地块，客人无需支付五星级酒店的价格，即可享受到五星级酒店的地段优势。汉庭客栈  汉庭客栈低价住宿带来欢乐
汉庭客栈是汉庭连锁酒店旗下品牌，致力于为休闲旅游客人提供干净、低价的住宿选择。汉庭客栈内部设计紧凑，致力于为客人提供性价比最高的住宿体验。酒店内部所有的设施均能满足客人的基本需求，为客人最大限度节省出行预算。
汉庭快捷
愿景 —— Vision成为世界级的伟大企业使命 —— Mission成为客户首选的中国经济型酒店品牌 
To be the customers' first choice brand of economy hotels in China价值观 —— Value人本 Humanity我们的努力是为了使你的生活更美好！ 
团队 Teamwork一帮志同道合的朋友一起快乐地做成一件伟大的事业！ 
诚信 Integrity诚实做人，重诺守信！ 
结果 No excuse不找借口，达成目标！ 
学习与创新Novel 让我们做得更好！
特色
在汉庭，硬件更优质整根弹簧盘成的床垫，最大限度保证睡眠舒适； 
荞麦记忆棉双面枕，满足颈部不同需求； 
金属花洒品质卓越，24小时恒温恒压，水量充足； 
双网线接口，办公桌、床头方便随心办公； 
静谧的图书阅读区，带来不可多得的闲暇心情。在汉庭，出行更便捷汉庭近250家门店，服务辐射全国； 
在北京、上海、天津、广州、深圳等全国近50个主要商务城市高密度布点； 
酒店多位于城市商务中心、旅游景点，出行方便； 
无停留服务，只需入店时结清房费，离店无需等待。在汉庭，服务更超值酒店商务区内电脑、打印、复印、传真各项服务供您限量免费使用； 
可在酒店大堂免费享用茶水、咖啡； 
房间内提供免费瓶装饮用水； 
金会员享受免费早餐服务； 
微笑热诚的服务为您的旅程更添一份无价的好心情。
创始人
提到季琦，就不得不提到上海。1985年，19岁的农民青年季琦第一次离开老家江苏，到上海读大学。对这个热情、洒脱、简单的“乡下人”来说，跟很多来上海闯世界的年轻人一样，这里是他人生梦想开始的地方。采访　在上海成个家，有个2室一厅的小窝，安安心心的过过小日子  季琦，这样的梦想对于一个从农村走出来的孩子而言，还是太大了。转眼大学毕业，即将跨出校门，生活的坚
1994年之前，季琦是学生和职员，日子过得波澜不惊；1994年以后，季琦是开创者和企业家，激情彭湃。变化很大，那么，1994年究竟发生了什么？ 就是在美国“憋屈并思索”的一年啊，把季琦身体里那股激情彻底逼了出来，一发不可收拾。从1995年回国到2004年，季琦创下携程、如家、汉庭等5家公司，平均每两年一个。赶着去美国是一股激情，着急回国也是一股激情；连续不断的创业更需要激情，而且“每次创业都跟第一次一样”。季琦从此发现，激情是自己的本性。
回忆起那段创业经历，季琦说当时是抱着摸着石头过河的心态，但是，象他跟我们记者说的，他不怕失败，本来就是农村来的孩子，有什么好怕的呢？都说不怕失败大概是创业者的一个共同特点，只要最坏的结局超不出自己设定的心理底线。2002年，在携程发展正顺时，季琦便从携程抽身而出，身份也由携程总裁变为了如家酒店连锁的CEO。当如家酒店连锁开业不到一年时，非典降临了，这对于刚刚处在飞速发展期的如家酒店营业产生了不小的影响。
即使在人心惶惶的非典时期，季琦也没有想到过去放弃，非典最终过去，一切趋向平静。但人心的涣散让季琦再次陷入了思考。
2005年1月，如家正式换帅，季琦再次从人们视线中消失。仅过了一个月，季琦便组建了力山投资公司，并担任汉庭酒店连锁CEO。
在季琦看来，快乐就来自于一直爬到山顶，感受一览众山小之前出汗的愉悦。快乐就在于过程，这与人生，与做企业一个道理。如今年届四十的季琦先生初为人父，喜悦之情溢于言表。
汉庭荣誉
2011年6月 汉庭酒店集团荣获，由《中国证券报》和美国纳斯达克OMX集团联合推出的2010年度“中证-纳斯达克金牛上市公司奖”的  中证-纳斯达克金牛上市公司奖“最佳首次发行公司”奖项
2011年6月 汉庭快捷荣获 《时尚旅游》的“中国旅游金榜”“2011年度最佳经济型连锁酒店品牌”称号。 
2011年3月 在2011亚洲酒店论坛，获得第六届酒店星光奖“中国最佳经  最佳经济型连锁酒店品牌济型连锁酒店品牌”荣誉
2008年7月 　“清科--中国最具投资价值企业50强” 　
2008年4月 　“去哪儿最佳经济型连锁酒店——  星光奖最适合商务出行奖 　
2008年3月 　 第三届《时尚旅游》“读者票选旅游金榜” 最喜爱的经济型酒店 　
2007年11月 　入选“2007第一财经?中国创业投资价值榜 最具投资潜力企业50强” 　
2007年11月 　获得“中国营销2007年度标杆企业—最佳品牌创新奖” 　
2007年10月 　获得中外酒店论坛白金奖“最佳品牌连锁酒店”称号 　
2007年6月 　 　获得全球酒店“五星金钻奖”中国先锋酒店连锁称号
全国分布
上海汉庭(105)1 海友客栈上海世博浦东南路店（原塘桥南浦大桥店） 上海市浦东新区浦东南路2162号（微山路路口） 
2 汉庭海友客栈上海新天地店 上海市卢湾区重庆南路283号（靠近徐家汇路，南北高架桥徐家汇路匝道入口处右侧） 
3 汉庭海友客栈上海静安寺店 上海市静安区万航渡路105号（近北京西路路口） 
4 汉庭海友客栈上海虹口足球场店 上海市虹口区东江湾路199-221号（靠近花园路口） 
5 全季酒店上海静安寺康定路店 上海市静安区康定路1018号 
6 全季酒店上海新天地店 上海市卢湾区重庆南路283号（靠近徐家汇路） 
7 全季酒店上海徐家汇田林店 上海市徐汇区宜山路700号4号楼（9号线桂林路站1号出口左侧5米即到） 
8 全季酒店上海徐家汇店 上海市徐汇区肇嘉浜路1065号（靠近天钥桥路口） 
9 全季酒店上海静安寺中心店 上海市静安区万航渡路105号（静安寺旁，万航渡路北京西路路口；） 
10 全季酒店上海淮海路店 上海市黄浦区云南南路297号（近淮海东路） 
11 全季酒店上海西郊店 上海市虹桥路2266号（万豪酒店旁徽商会馆内） 
12 全季酒店上海金桥碧云店 上海浦东新区碧云国际社区黄杨路221号（靠近碧云路） 
13 汉庭快捷上海虹桥枢纽店 上海市闵行区沪青平公路1209号（沪青平公路中春路路口） 
14 汉庭快捷上海中山北路店 上海市闸北区中山北路997号（靠近沪太路长途汽车站） 
15 汉庭快捷上海恒隆广场店 上海市静安区新闸路1051号B幢（靠近泰兴路） 
16 汉庭快捷上海世博园浦东南路店(原上海世博村店) 上海市浦东新区浦东南路3500号（靠近华丰路） 
17 汉庭快捷上海大木桥店 上海市徐汇区茶陵路333号（靠近大木桥路） 
18 汉庭快捷上海复旦店 上海市虹口区松花江路2628号（靠近邯郸路） 
19 汉庭快捷上海七宝中心店（原上海七宝店） 上海市沪松公路577号（沪松公路中春路路口） 
20 汉庭快捷上海虹桥枢纽二店 上海市闵行区老北翟路4800号（华翔路天山西路十字路口） 
21 汉庭快捷上海火车站店 上海市闸北区秣陵路83号（火车站南广场铁路上海站售票处对面。） 
22 汉庭快捷上海火车站北广场店 上海市闸北区芷江西路230号（靠近共和新路） 
23 汉庭酒店上海南京西路店 上海市静安区石门一路239号（靠近南京西路） 
24 汉庭快捷上海南丹路店 上海市徐汇区南丹东路111号（靠近天钥桥路） 
25 汉庭快捷上海徐家汇二店 上海市钦州北路98号（靠近市六医院后门） 
26 汉庭快捷上海襄阳路店 上海市徐汇区襄阳南路578号（靠近肇家浜路） 
27 汉庭快捷上海中山公园江苏路店(原上海江苏路店) 上海市长宁区江苏北路30号（靠近长宁路口） 
28 汉庭快捷上海静安寺武宁南路店（原上海武宁南路店） 上海市静安区武宁南路183号靠近武定西路 
29 汉庭快捷上海静安寺二店 上海市静安区北京西路1718号（靠近万航渡路路口，云峰剧场旁） 
30 汉庭快捷上海静安寺新店 上海市静安区万航渡路529号（靠近武定西路85度C旁边） 
31 汉庭快捷上海中山公园店 上海市长宁区武夷路155号（靠近延安西路路口，比利时领事馆旁） 
32 汉庭快捷上海世贸商城店 上海市长宁区伊犁路158号 
33 汉庭快捷上海中山公园二店 上海市长宁区愚园路1333号 
34 汉庭快捷上海徐家汇东安路二店 上海市徐汇区东安路221号（近斜土路） 
35 汉庭快捷上海凯旋路店 上海市长宁区杨宅路278号（靠近凯旋路） 
36 汉庭快捷上海延安路店 上海延安西路1066号（靠近江苏路口，瑞峰公寓；延安高架江苏路口下即到） 
37 汉庭快捷上海陕西北路澳门路店 上海市普陀区澳门路503号（靠近陕西北路，东方罗玛大浴场旁） 
38 汉庭酒店上海长寿店 上海市普陀区昌化路826号（玉佛寺旁，近长寿路，距月新家居广场200米；内环高架上海火车站天目西路口下） 
39 汉庭快捷上海镇坪路店 上海市普陀区中山北路2216号 
40 汉庭快捷上海西藏北路店 上海市闸北区西藏北路1318号（靠近中山北路） 
41 汉庭快捷上海打浦桥店 上海市卢湾区南塘浜路128号（靠近打浦路） 
42 汉庭快捷上海徐家汇东安路店 上海市徐家汇东安路346号（靠近零陵路） 
43 汉庭快捷上海静安寺店 上海市静安区武定路1058号（靠近胶州路路口） 
44 汉庭快捷上海江宁路店 上海市静安区江宁路853号（靠近海防路） 
45 汉庭快捷上海西康路店 上海市静安区西康路899号（门店距离玉佛寺100米，地铁7号线长寿路站，5号出口左转至第一个红绿灯西康路，右行直走步行5分钟即达。近安远路路口，创展大厦对面） 
46 汉庭快捷上海南京东路店 上海市黄浦区山东中路230号 
47 汉庭快捷上海南京东路步行街店 上海市黄浦区河南中路505号（近天津路） 
48 汉庭快捷上海外滩店 上海市黄浦区中山南路433号（靠近复兴东路） 
49 汉庭快捷上海西藏南路店 上海市黄浦区西藏南路916号 
50 汉庭酒店上海陕西南路店 上海市卢湾区陕西南路233号（靠近永嘉路） 
51 汉庭快捷上海茂名路店 上海市黄浦区茂名南路8号（靠近延安中路路口） 
52 汉庭快捷上海鲁班路店 上海卢湾区鲁班路412号（靠近瞿溪路口） 
53 汉庭快捷上海徐家汇店 上海市徐汇区徐虹中路20号（靠近宜山路轻轨） 
54 汉庭快捷上海徐家汇万体馆西店（原上海万体馆西店） 上海市徐汇区中山西路2277号（靠近宜山路） 
55 汉庭快捷上海交大沪闵路店(原沪闵路南店) 上海市闵行区沪闵路277号（靠近东川路地铁站） 
56 汉庭快捷上海南站店 上海市徐汇区天等路 400 号（靠近嘉川路） 
57 汉庭快捷上海徐家汇交大店(原汉庭快捷上海交大店) 上海市徐汇区番禺路955号 
58 汉庭快捷上海金沙江路店（原汉庭快捷长风店） 上海市普陀区中江路858号（靠近金沙江路） 
59 汉庭快捷上海真光店 上海市普陀区真光路1475号（靠近曹安公路） 
60 汉庭快捷上海天山西路店 上海市长宁区哈密路390号（西郊百联购物中心北侧200米） 
61 汉庭快捷上海广粤路店 上海市虹口区广粤路281号（近广灵四路） 
62 汉庭快捷上海闸北公园店 上海市闸北区洛川中路840号（近共和新路） 
63 汉庭快捷上海沪太路店 上海市沪太路975号（沪太路与灵石路交叉口,毗邻地铁7号线行知路站） 
64 汉庭快捷上海岚灵花市店 上海市普陀区灵石路1559号 
65 汉庭快捷上海市北工业园区店 上海市汶水路273号（万荣路口） 
66 汉庭酒店上海外滩外白渡桥店 上海市虹口区黄浦路200号青浦路50号（外滩边上外白渡桥东100米） 
67 汉庭快捷上海北外滩店 上海市虹口区东大名路713号（靠近高阳路） 
68 汉庭快捷上海江浦路店 上海市杨浦区江浦路627号 
69 汉庭快捷上海虹口广中路店（原上海虹口足球场一店） 上海市虹口区水电路200号（靠近广中路） 
70 汉庭快捷上海虹口足球场店（原上海虹口足球场二店） 上海市虹口区西江湾路420号（虹口足球场正门马路对面） 
71 汉庭快捷上海陆家嘴八佰伴店 上海市浦东区崂山路708号（靠近浦电路） 
72 汉庭快捷上海世博三林店 上海市浦东新区东书房路172号（靠近板泉路口） 
73 汉庭快捷上海上南店 上海市浦东新区上南路3855号 
74 汉庭快捷上海大柏树店 上海市虹口区曲阳路789号（（靠近邯郸路）） 
75 汉庭快捷上海金山城市沙滩店 上海市金山区石化卫清西路526-528号（靠近蒙山路） 
76 汉庭快捷上海宝山吴淞店 上海市宝山区同泰北路403号（靠近水产路） 
77 汉庭快捷上海莘庄店 上海市闵行区莘东路521号（靠近莘北路） 
78 汉庭快捷上海闵行体育公园店 上海市闵行区宝铭路82号（靠近新镇路） 
79 汉庭快捷上海七莘路店 上海市闵行区七莘路2000号（靠近中谊路） 
80 汉庭快捷上海虹桥漕宝路店（原上海漕宝路店） 上海市漕宝路1687号（地铁9号线星中路站1号口50米处） 
81 汉庭快捷上海虹桥枢纽七宝二店（原上海虹桥枢纽沪星路店） 上海市闵行区沪星路288号（靠近七莘口七宝巴黎春天） 
82 汉庭快捷上海漕河泾店 上海市闵行区东兰路228号（近古美路口） 
83 汉庭快捷上海虹桥机场二店 上海市闵行区程家桥路181号（近金汇路虹中支路。） 
84 汉庭快捷上海新虹桥店 上海市闵行区万源路2739号（靠近吴中路口） 
85 汉庭快捷上海古北二店 上海市闵行区吴中路685号（近中环虹许路口） 
86 汉庭快捷上海古北一店 上海市闵行区吴中路638号（近中环虹许路口，天禧嘉福酒店旁边；） 
87 汉庭快捷上海虹桥吴中路新店 上海市闵行区虹井路218号（近吴中路口） 
88 汉庭快捷上海虹桥机场店 上海市长宁区沪青平公路58号（近延安西路立交桥下） 
89 汉庭快捷上海陆家嘴东方路店 上海市浦东新区峨山路91弄38号（在陆家嘴软件园内） 
90 汉庭快捷上海新国际博览中心店（原联洋店） 上海市浦东新区杨高中路2108号（靠近芳甸路口） 
91 汉庭快捷上海外高桥店 上海市浦东外高桥保税区夏碧路118号（靠近季景路口） 
92 汉庭快捷上海新金桥店 上海市浦东新区新金桥路230号t17-6（靠近金藏路口） 
93 汉庭快捷上海万体馆南店 上海龙华西路282号（龙吴路龙华西路口） 
94 汉庭快捷上海光大店 上海市徐汇区龙漕路2号（地铁1号线漕宝路站4号口） 
95 汉庭快捷上海田林店 上海市徐汇区漕宝路233号（靠近苍梧路） 
96 汉庭快捷上海川沙店 上海市浦东新区川沙镇川沙路5229号（靠近南桥路口，地铁2号线川沙站1号出口，朝北步行80米即达） 
97 汉庭快捷上海张江店 上海市浦东新区蔡伦路333号（靠近伽利略路） 
98 汉庭快捷上海金桥店 上海市乐园路26号（靠近杨高北路口渔塘公园餐厅对面,巨峰路易初莲花旁） 
99 汉庭快捷上海惠南中心店 上海市浦东新区惠南镇人民东路2635弄105号（近靖海路、客房四至六层） 
100 汉庭快捷上海周浦店(原周浦万达广场店) 上海市浦东新区上南路7768号（靠近周康路/万达广场） 
101 汉庭快捷上海奉贤环城东路店 上海市奉贤区南桥镇南港路1893号（环城东路南港路路口） 
102 汉庭快捷上海松江店 松江区荣乐东路1599号（靠近松卫北路路口） 
103 汉庭快捷上海松江方塔店 上海市松江区中山东路18号 
104 汉庭快捷上海松江泗泾店 上海市松江区泗泾镇沪松公路2511弄2幢16号（靠近鼓浪路泗泾五金城） 
105 汉庭快捷上海嘉定叶城路店 上海市嘉定区叶城路485号（沪嘉高速出口左转300米左右） 北京汉庭(63)1 全季酒店北京西直门店 北京市西城区展览路14号（展览路与车公庄大街交接） 
2 全季酒店北京王府井店 北京市东城区王府井大街20号（王府井步行街北端首都剧场北邻） 
3 全季酒店北京朝阳门店 北京市东城区朝阳门内大街130号（地铁朝阳门站B口向西300米路南） 
4 全季酒店北京东单店 北京市东城区北极阁三条32号（长安街东单路口东北角农业总银行后面） 
5 全季酒店北京东直门店 北京市东城区东直门外斜街察慈小区16号楼（东直门外第一个红绿灯旁小区道路向北走，标志建筑：中国烟草大厦） 
6 全季酒店北京宣武门店 北京市宣武区宣武门外大街92号（靠近菜市口南大街，崇光百货大厦） 
7 汉庭快捷北京水立方店（原北京科技馆店） 北京市朝阳区裕民路3号院1号楼汉庭酒店（北三环科技馆北） 
8 汉庭快捷北京花园桥店 北京市海淀区北洼路26号（北洼东街内首师大北一校区旁） 
9 汉庭快捷北京国贸店 北京市朝阳区农光里117号楼（东三环劲松桥东南角与劲松大厦同座） 
10 汉庭快捷北京华贸二店 北京市朝阳区东四环红领巾桥南（路西，四环里的辅路上家乐福南侧） 
11 汉庭快捷北京后海店 北京市东城区交道口南大街菊儿胡同33号 
12 汉庭快捷北京火车南站二店 北京市丰台区马家堡西里38号（地铁4号线马家堡站出C口即到，1楼前台，4-6楼客房） 
13 汉庭快捷北京中关村南店 北京市海淀区大柳树路甲17号院（靠近北京交通大学西门） 
14 汉庭快捷北京赵公口店 北京市丰台区南三环中路甲13号（赵公口长途汽车站向东50米） 
15 汉庭快捷北京苏州桥店 北京市海淀区万柳东路18号（海淀检察院向北200米） 
16 汉庭快捷北京上地环岛店 北京市海淀区上地六街17号（靠近上地西路、康德大厦西楼） 
17 汉庭快捷北京中关村四通桥店 北京市海淀区中关村南大街1号（友谊宾馆颐园A座，理工大学小东门旁边） 
18 汉庭快捷北京北海公园店 北京市西城区西四东大街43号（靠近阜成门内大街） 
19 汉庭快捷北京紫竹桥店 北京市海淀区北洼路4号（紫竹院路香格里拉酒店正西150米路北侧） 
20 汉庭快捷北京火车南站店 北京市丰台区开阳里二街西巷4号（靠近右安门桥和南二环） 
21 汉庭快捷北京西客站南广场店 北京市丰台区太平桥东里16号（近西站南路） 
22 汉庭快捷北京六里桥店 北京市丰台区太平桥路华源一里甲9号（电力医院向南（沿太平桥路）800米） 
23 汉庭快捷北京清华东门店 北京市海淀区王庄路27号（城建四公司院内） 
24 汉庭快捷北京鸟巢店 北京市朝阳区北四环东路惠新东桥西安慧东里19-20号楼（小营华堂对面巷子里） 
25 汉庭快捷北京望京店 北京市朝阳区望京阜通东大街金兴路2号（毗邻西门子大厦） 
26 汉庭快捷北京望京花家地店 北京市朝阳区花家地1号 
27 汉庭快捷北京大郊亭店 北京市朝阳区南磨房乡大郊亭桥东200米路南（近东四环路） 
28 汉庭快捷北京航天桥店 北京市海淀区阜成路44号（北京肿瘤医院东侧100米） 
29 汉庭快捷北京马家堡店 北京市丰台区西马场北里甲13号（临近博爱医院） 
30 汉庭快捷北京中关村学院桥店 北京市海淀区学院路31号（北四环学院桥西北角） 
31 汉庭快捷北京五棵松二店 北京市海淀区复兴路24号118号楼 
32 汉庭快捷北京平谷世纪广场店 北京市平谷区新平北路57号（世纪广场正对面） 
33 汉庭快捷北京鼓楼店 北京市西城区西绦胡同15号后门（地铁2号线--鼓楼大街站B口出向西150米、北二环辅路） 
34 汉庭快捷北京德胜门店 北京市西城区六铺炕三区9号北楼 
35 汉庭快捷北京马甸桥店 北京市西城区北三环中路18号（靠近德胜门外大街） 
36 汉庭快捷北京立水桥店 北京市朝阳区立水桥路八号院1、2号楼（北方明珠大厦东侧） 
37 汉庭快捷北京国展店 北京市朝阳区北三环东路12号（靠近中国国际展览中心） 
38 汉庭快捷北京燕莎霄云桥店(原汉庭快捷北京丽都店) 北京市朝阳区酒仙桥芳园南街1号（靠近将台西路） 
39 汉庭快捷北京酒仙桥798店(原汉庭快捷北京酒仙桥店) 北京市朝阳区酒仙桥路13号（靠近近将台路） 
40 汉庭快捷北京工体店 北京市朝阳区朝外大街吉祥里206号（靠近工人体育馆） 
41 汉庭快捷北京三里屯SOHO店 北京市朝阳区中纺里20号楼（三里屯SOHO向南50米） 
42 汉庭快捷北京国贸二店 北京市朝阳区东三环南路48号（靠近双井桥的东南侧） 
43 汉庭快捷北京广渠门店 北京市崇文区广渠家园12号（靠近广渠门外大街） 
44 汉庭快捷北京国贸三店 北京市朝阳区下甸厂坡村16号院（西大望路八王坟长途客运站对面向西200米） 
45 汉庭快捷北京王府井二店 北京市东城区甘雨胡同31号（地铁5号线灯市口站A出口向南右转） 
46 汉庭快捷北京密云鼓楼大街店 北京市密云县鼓楼东大街105号14-8 
47 汉庭快捷北京崇文门店 北京市东城区船板胡同47号（靠近崇文门大街） 
48 汉庭快捷北京朝阳财满街店 北京市朝阳区朝阳路高井176号（靠近民航总医院） 
49 汉庭快捷北京长虹桥店 北京市朝阳区农展南里12号院5号楼（靠近东三环长虹桥东北角，农业部正门西侧） 
50 汉庭快捷北京华贸店 北京市朝阳区红庙十字路口西南角6号楼（阳光一百对面） 
51 汉庭快捷北京天坛店 北京市崇文区天坛路57号（天坛东门往北500米，或者天坛北门往东200米） 
52 汉庭快捷北京燕莎新源里店 北京市朝阳区新源街18号（靠近顺源街） 
53 汉庭快捷北京三元西桥店 北京市朝阳区静安里45号（靠近左家庄、国展附近） 
54 汉庭快捷北京亚运村店 北京市朝阳区安苑北里23-2（安苑路和安定路交口） 
55 汉庭酒店北京西单店 北京市西城区佟麟阁路87号（靠近新华社西门） 
56 汉庭快捷北京西直门二店 北京市西城区西直门内大街南草厂街11号（靠近地铁4号线、2号线、13号线交汇） 
57 汉庭快捷北京阜成门店 北京市西城区百万庄大街甲2号（靠近阜成门北大街） 
58 汉庭快捷北京三里河店 北京市西城区三里河东路A7—5（靠近月坛北街和三里河东路交叉路口西北角） 
59 汉庭快捷北京军博店 北京市海淀区北蜂窝路20号（靠近天佑大厦） 
60 汉庭快捷北京五棵松店 北京市丰台区大成路3号（靠近西四环中路） 
61 汉庭快捷北京大观园店 北京市宣武区白纸坊西街甲3号（与白广路交接） 
62 汉庭快捷北京农展馆店(原汉庭快捷北京三里屯酒吧街店) 北京市朝阳区东直门外大街12号（全国农业展览馆西侧，东外大街与三里屯交叉口） 
63 汉庭快捷北京天坛温泉店（原北京天坛二店） 北京市东城区光明西路1号（天坛东门向东过铁路桥即到） 天津汉庭(25)1 汉庭海友客栈天津滨江道步行街店 天津市和平区滨江道127-129号（近劝业场；滨江道与兴安路交叉口） 
2 全季酒店天津小白楼店 天津市和平区浙江路15号（与曲阜道交口） 
3 汉庭快捷天津开发区第二大街店（原全季酒店天津开发区店已合并） 天津市塘沽开发区洞庭路41号 
4 汉庭快捷天津友谊路二店 天津市河西区宾友道121号（靠近友谊路） 
5 汉庭快捷天津鞍山道店 天津市和平区四平西道11号（与拉萨道交口） 
6 汉庭快捷天津华苑店 天津市南开区复康路翠庭园1号 
7 汉庭快捷天津海光寺店 天津市南开区万德庄南北大街与双峰道交口 
8 汉庭快捷天津卫津路天津大学店 天津市和平区卫津路149号 
9 汉庭快捷天津红旗路店 天津市南开区红旗路163号（靠近长江道立交桥、可口可乐公司） 
10 汉庭快捷天津蓟县鼓楼店 天津市蓟县渔阳镇人民西大街80号（靠近独乐寺,渔阳鼓楼） 
11 汉庭快捷天津滨江道店 天津市和平区辽宁路164号（靠近劝业场、康乐冷食后面） 
12 汉庭快捷天津小白楼店(原汉庭快捷天津湖北路店) 天津市和平区湖北路31号（与烟台道交口/近大光明桥） 13 汉庭快捷天津南开大学店(原天津八里台店) 天津市南开区卫津路与水上北路交口聂公桥旁（天津电视塔斜对面） 
14 汉庭快捷天津佟楼店 天津市河西区平山北道增1号 
15 汉庭快捷天津古文化街店 天津市南开区古文化街文化小城7-503号（北马路和张自忠路交叉路口，望海楼斜对面） 
16 汉庭快捷天津火车北站店 天津市河北区昆纬路85号（昆纬路与东五经路交口） 
17 汉庭快捷天津工大店 天津市河东区成林道91-1号（嘉华小区对面） 
18 汉庭快捷天津中山门店 天津市河东区富民路69号（第二工人文化宫正对路口） 
19 汉庭快捷天津白堤路店 天津市南开区科贸街白堤路207号（靠近航海道口） 
20 汉庭快捷天津友谊路店 天津市河西区友谊路5号（靠近围堤道） 
21 汉庭快捷天津宾悦桥店 天津市南开区宾水西道333号（万豪大厦C座） 
22 汉庭快捷天津塘沽外滩店 天津市塘沽区和平路34号 
23 汉庭快捷天津开发区店 天津市经济技术开发区捷达路5号（塘沽区） 
24 汉庭快捷天津静海十里长街店 天津市静海县津德路50号（静海县交警支队对面） 
25 汉庭快捷天津武清开发区店 天津市武清区建设北路1号 重庆汉庭(8)1 汉庭海友客栈重庆观音桥步行街店 重庆市江北区建新东路11号（靠近观音桥东环路天桥下，紧邻前沿俱乐部/罗森超市，距江北中医院仅50米、观音桥步行街仅400米） 
2 汉庭海友客栈重庆沙坪坝三峡广场店 重庆市沙坪坝区沙南街43号（靠近南开中学、重庆大学，汉庭连锁酒店2楼） 
3 汉庭快捷重庆南坪步行街中心店 重庆市南坪区南城大道7号（南坪二小区车站上行10米，重庆妇女儿童活动中心大楼） 
4 汉庭快捷重庆大坪轻轨站店 重庆市渝中区大坪正街116号 
5 汉庭快捷重庆南坪步行街店 重庆市南岸区南坪东路15号（靠近响水路和宏声路） 
6 汉庭快捷重庆沙坪坝三峡广场店 重庆市沙坪坝区沙南街43号（靠近南开中学、重庆大学） 
7 汉庭快捷重庆加州店 重庆市渝北区松牌路81号（靠近松树桥，在龙溪镇上） 
8 汉庭快捷重庆上清寺店 重庆市渝中区中山三路159号沈阳汉庭(22)1 汉庭海友客栈沈阳太原街店(原海友客栈南五马路店) 沈阳市和平区太原南街180号（金都饭店对面） 
2 汉庭海友客栈沈阳三好街店 沈阳市和平区三好街55号B座（信息产业大厦浦发银行楼上） 
3 全季酒店沈阳中山公园店 沈阳市和平区民主路181号（靠近大润发超市） 
4 汉庭快捷沈阳南五马路店 沈阳市和平区太原南街180号（金都饭店对面） 
5 汉庭快捷沈阳西塔店 沈阳市和平区市府大路106号（市府大路与西塔街交汇处） 
6 汉庭快捷沈阳苏家屯火车站店 沈阳市苏家屯区枫杨路26号、含笑街28号（苏家屯区火车站对过200米） 
7 汉庭快捷沈阳北行店 沈阳市皇姑区巴山路71-1号（北行商场旁） 
8 汉庭快捷沈阳和平大街店 沈阳市和平区柳州街17号（中山路与和平大街交汇处，大连银行南走100米，和平大街联通公司斜对面） 
9 汉庭快捷沈阳铁西家具城店 沈阳市铁西区兴顺街175号（靠近铁西家具城） 
10 汉庭快捷沈阳三好街店 沈阳市和平区三好街55号（信息产业大厦浦发银行三楼） 
11 汉庭快捷沈阳市府路店 沈阳市和平区北市一街118号（市府大路北市场老邮局后身，市政府广场西500米即是） 
12 汉庭快捷沈阳太原街店(原汉庭快捷沈阳中山广场店) 沈阳市和平区同泽北街5号（中国医大一院正门西行100米左拐即是，即原丽晶大酒店，临近太原步行商业街100米） 
13 汉庭快捷沈阳南京南街店 沈阳市和平区南京南街100号（原七月宾馆、大润发超市南走100米） 
14 汉庭快捷沈阳五爱店 沈阳市沈河区热闹路58号（原五爱街雍伦大酒店） 
15 汉庭快捷沈阳太清宫店 沈阳市沈河区万寿寺街16号（靠近太清宫西侧） 
16 汉庭快捷沈阳北站惠工广场店 沈阳市沈河区惠工东一街29号（靠近团结路） 
17 汉庭快捷沈阳南塔店 沈阳市沈河区文化路161号（南塔国际鞋城东侧） 
18 汉庭快捷沈阳铁西滑翔店 沈阳市铁西区凌空二街37号（近生日城原浪海珠酒店） 
19 汉庭快捷沈阳北二东路店 沈阳市铁西区北二东路27号（北二路与云峰街交汇口，家乐福西侧即是） 
20 汉庭快捷沈阳北站北店 沈阳市皇姑区松花江街8号（靠近省消防总队） 
21 汉庭快捷沈阳中街店 沈阳市大东区东顺城街11号 
22 汉庭快捷沈阳火车站店(原汉庭沈阳太原南街店) 沈阳市和平区民族南街138号（沈阳站新客运站斜后边）广州汉庭(13)1 汉庭海友客栈广州荔湾彩虹桥店 广州市荔湾区西华路134号（临近彩虹戏院） 
2 汉庭海友客栈广州天河岗顶龙口东店 广州市天河区龙口东路129号（龙泽商业大厦内） 
3 全季酒店广州天河北店 广州市天河区天河北路6-8号（时代广场旁） 
4 汉庭快捷广州天河岗顶店 广州市天河区龙口西路138号（西北角顺盛大厦） 
5 汉庭快捷广州天河岗顶龙口东店（原天河岗顶二店） 广州市天河区龙口东路129号（龙泽商业大厦内） 
6 汉庭快捷广州中山二路店 广州市越秀区东华北路50号（靠近地铁一号线东山口站A出口） 
7 汉庭快捷广州天河店 广州市天河区天河路97-99号（靠近广州购书中心） 
8 汉庭快捷广州江湾店 广州市越秀区八旗二马路42号（航运大厦旁，靠近北京路和天字码头） 
9 汉庭快捷广州流花展馆店 广州市越秀区解放北路783号（靠近东风中路） 
10 汉庭快捷广州中山一路店 广州市天河区水均南街2号（中山一路和梅东路交界口、地铁杨箕站E1出口） 
11 汉庭快捷广州越秀盘福店（原汉庭快捷广州海珠北路店） 广州市越秀区海珠北路228号 
12 汉庭快捷广州番禺市桥步行街店 广州番禺区大北路105号（地铁3号线市桥站C出口番禺宾馆对面凯美大厦7楼） 
13 汉庭快捷广州天河燕岭店 广州市天河区燕岭路149号（地铁燕塘站C出口省武警医院对面北环高速出入口处） 济宁汉庭（5）1.汉庭快捷济宁太白中路店 济宁市太白中路运河城D座一楼（贵和购物中心对面,近共青团路）
2.汉庭快捷济宁红星路百花公园店 济宁市市中区红星路37号（利隆大厦）
3.汉庭快捷济宁古槐路店 济宁市市中区古槐路36号（博物馆北临）
4.汉庭快捷曲阜游客中心店 济宁曲阜市静轩东路游客集散中心2号楼（三孔对面）
5.汉庭快捷邹城贵和店 济宁邹城市太平西路829号（贵和购物中心）其他地区杭州汉庭(13) 苏州汉庭(11) 无锡汉庭(8) 
南京汉庭(8) 大连汉庭(7) 常州汉庭(3)
西安汉庭(5) 深圳汉庭(5) 泰州汉庭(1)
南通汉庭(4) 太原汉庭(4) 济南汉庭(4) 
成都汉庭(4) 重庆汉庭(3) 宁波汉庭(3)
石家庄汉庭(3) 郑州汉庭(2) 哈尔滨汉庭(2) 
武汉汉庭(2) 长沙汉庭(2)株洲汉庭（1） 
厦门汉庭(2)芜湖汉庭(2) 青岛汉庭(2)
扬州汉庭(2) 泰安汉庭(1) 淄博汉庭(1)
金华汉庭(1) 合肥汉庭(9) 福州汉庭(1)
莆田汉庭(1) 桂林汉庭(1) 南宁汉庭(1)
长春汉庭(1)郴州汉庭（1）
相关条款
注意事项1.酒店房间一般情况下保留到预订当天的下午6点整，节假日可能保留到下午5点整； 
2.如客人因其它原因晚到，请在预订成功后直接致电保留房间，会展等特殊时期需要提供信用卡
担保或者提前支付房费。 
3.房间价格因季节变化可能不准确,请以电话咨询或最终确认为准。 
4.对于客户的问题会及时给予满意的回复，有意见或者建议可以及时联系酒店的相关负责人，保证 
一切酒店的入住人员能够满意、放心。办理入住入住酒店须凭有效证件登记，一般酒店办理入住时会收取客人一定的押金，作为您在酒店 内的部分消费或损坏（遗失）酒店物品的保证金，退房时凭押金单结清费用后退回，押金的多少视各酒店 规定。付款方式前台支付（Visacard,牡丹卡,金穗卡,长城卡,龙卡,万事达卡,运通卡,大莱卡,JCBcard 现金）。 
房费包含酒店服务费，不包括酒店其他费用、税收及客人额外要求的费用。 
通常酒店的入住时间为14：00，离店时间为正午12：00。如提前入住或推迟离店，均需酌情加收一定费用。
汉庭定位
汉庭酒店集团麾下有中端“全季”、标准经济型“汉庭快捷”和百元酒店“海友客栈”。此外，汉庭刚刚收编了星程酒店，今后定位为特色化非标准中端酒店。
品牌名称要分几个层级：首先是企业名称，然后是企业下属的业务板块品牌名称，再次是各个业务板块之下的产品品牌。这些名称可以完全一致，也可以完全不同。如果是单一品牌名称，则有利于市场认知，且由于只有一个名称，节省了很多营销费。“但这种过于单一化的命名方式等于是将鸡蛋放在一个篮子里，一旦某一个产品或某一个板块业务发生问题，则殃及整个企业。反之，假如用多品牌，则可以多元化，不同定位发展企业的各个业务板块和产品，万一哪个品牌出现问题，不会直接影响其他业务。当然，营销费用肯定比较高。” 美国博斯公司全球合伙人徐沪初告诉本报记者，汉庭显然是为了多元化策略而选择了将集团名称和品牌名称分离，多品牌可减少品牌伤害风险，也可更清晰化各个品牌的定位。
当然，最关键的或许是汉庭更要规避经济型酒店的局限性。
“汉庭这个名字总给人经济型酒店的局限感，现在汉庭多元化发展后，还有中高端品牌和个性化品牌出现，这些都是有别于经济型酒店的，因此集团必须要规避这种局限性。”华美首席知识专家赵焕焱指出，跨国公司通常会将集团和产品品牌名称区分，以突出集团的综合性，但有时也会故意将集团名称改为麾下品牌名称，关键看企业要突出什么定位。
“比如数年前，美国圣达特酒店集团，其原本麾下并没有奢华品牌，但在收购豪华温德姆酒店后，其希望给人高端综合酒店集团定位感，于是将集团名称改为温德姆酒店集团，这与汉庭集团的更名看似相反，但实质是一样的，都是为了明确集团的定位。圣达特借麾下高端品牌突出自己是豪华酒店公司，而汉庭则是通过与经济型品牌‘脱离关系’来强调自己的综合定位。
集团大事
汉庭发展历史2010.10 汉庭新品牌海友客栈落户北京
2010.08 汉庭独立董事平萍辞职 约瑟夫-周担继任卡2010.08 汉庭连锁酒店与去哪儿签署战略合作协议
2010.07 汉庭酒店手机网站正式上线
2010.07 汉庭推出家庭房 解决世博住宿 　
2010.05 汉庭世博酒店英文预订网站上线　
2010.05 汉庭推出自行车低价租赁　
2010.04 汉庭连锁酒店携手D-Link推出联名会员卡　
2010.03.26 汉庭在纳斯达克成功上市2010.02 汉庭酒店正式更名为汉庭全季酒店
2009.09 汉庭客栈正式更名为汉庭海友客栈
2009.07 汉庭宣传二季度盈利超过5000万人民币
2009.05 汉庭联手招商银行推出联名信用卡
2008.09 首家汉庭客栈在杭州西湖风景区开业
2008.07 完成第二笔融资5500万美元
2008.06 北京王府井店开业，汉庭开业门店达到100家
2008.02 汉庭酒店连锁改名汉庭酒店集团，确立酒店、快捷、客栈三大产品线
2007.10 汉庭与中国建设银行联合推出汉庭龙卡信用卡
2007.08 汉庭网站改版，新域名启用
2007.07 汉庭开通网上预订
2007.07 完成第一轮8500万美元融资
2007.05 汉庭成为中国东方航空公司，中国国际航空公司非航合作伙伴
2007.05 汉庭正式开放特许加盟
2006.09 汉庭常客俱乐部——汉庭会成立
2006.07 汉庭预定热线4008-121-121开通
2006.04 汉庭官方网站正式开通
2005.08 汉庭第一家门店昆山火车站店试营业汉庭COO辞职汉庭公告称，为了创造一个更加有效率的管理构架，鉴于苏畅的辞职，汉庭连锁酒店近期并不打算填补COO这一缺位，但也无取消这一职位的计划。预订流程：第一步: 选择好适合您的酒店后，您可以通过电话、网上下订单或传真，报客人姓名、房型及入住日期进行预订.
第二步: 在收到您的预订信息后，我们会在一小时内予以确认.
第三步：在收到我方确认后，客人只需在酒店前台报客人姓名即可.
第四步：入住时候需要携带成人身份证件登记入住，并需要交付一定的押金;
酒店图片
下面是汉庭客房的房间照片
  汉庭酒店本数据来源于百度地图，最终结果以百度地图数据为准。
  汉庭酒店卫生间  汉庭酒店卧室  汉庭酒店    

简介
在一种传统的结构化编程语言中，比如C，要进行测试的单元一般是函数或子过程。在像C++这样的面向对象的语言中， 要进行测试的基本单元是类。对Ada语言来说，开发人员可以选择是在独立的过程和函数，还是在Ada包的级别上进行单元测试。单元测试的原则同样被扩展到第四代语言（4GL)的开发中，在这里基本单元被典型地划分为一个菜单或显示界面。
经常与单元测试联系起来的另外一些开发活动包括代码走读（Code review)，静态分析（Static analysis)和动态分析（Dynamic analysis)。静态分析就是对软件的源代码进行研读，查找错误或收集一些度量数据，并不需要对代码进行编译和执行。动态分析就是通过观察软件运行时的动作，来提供执行跟踪，时间分析，以及测试覆盖度方面的信息。
详解
  cppunit进行单元测试单元测试（模块测试）是开发者编写的一小段代码，用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言，一个单元测试是用于判断某个特定条件（或者场景）下某个特定函数的行为。例如，你可能把一个很大的值放入一个有序list 中去，然后确认该值出现在list 的尾部。或者，你可能会从字符串中删除匹配某种模式的字符，然后确认字符串确实不再包含这些字符了。
单元测试是由程序员自己来完成，最终受益的也是程序员自己。可以这么说，程序员有责任编写功能代码，同时也就有责任为自己的代码编写单元测试。执行单元测试，就是为了证明这段代码的行为和我们期望的一致。
工厂在组装一台电视机之前，会对每个元件都进行测试，这，就是单元测试。
其实我们每天都在做单元测试。你写了一个函数，除了极简单的外，总是要执行一下，看看功能是否正常，有时还要想办法输出些数据，如弹出信息窗口什么的，这，也是单元测试，把这种单元测试称为临时单元测试。只进行了临时单元测试的软件，针对代码的测试很不完整，代码覆盖率要超过70%都很困难，未覆盖的代码可能遗留大量的细小的错误，这些错误还会互相影响，当BUG暴露出来的时候难于调试，大幅度提高后期测试和维护成本，也降低了开发商的竞争力。可以说，进行充分的单元测试，是提高软件质量，降低开发成本的必由之路。
对于程序员来说，如果养成了对自己写的代码进行单元测试的习惯，不但可以写出高质量的代码，而且还能提高编程水平。
要进行充分的单元测试，应专门编写测试代码，并与产品代码隔离。我认为，比较简单的办法是为产品工程建立对应的测试工程，为每个类建立对应的测试类，为每个函数（很简单的除外）建立测试函数。首先就几个概念谈谈我的看法。
一般认为，在结构化程序时代，单元测试所说的单元是指函数，在当今的面向对象时代，单元测试所说的单元是指类。以我的实践来看，以类作为测试单位，复杂度高，可操作性较差，因此仍然主张以函数作为单元测试的测试单位，但可以用一个测试类来组织某个类的所有测试函数。单元测试不应过分强调面向对象，因为局部代码依然是结构化的。单元测试的工作量较大，简单实用高效才是硬道理。
有一种看法是，只测试类的接口（公有函数），不测试其他函数，从面向对象角度来看，确实有其道理，但是，测试的目的是找错并最终排错，因此，只要是包含错误的可能性较大的函数都要测试，跟函数是否私有没有关系。对于C++来说，可以用一种简单的方法区隔需测试的函数：简单的函数如数据读写函数的实现在头文件中编写（inline函数），所有在源文件编写实现的函数都要进行测试（构造函数和析构函数除外）。
使用效果
我们编写代码时，一定会反复调试保证它能够编译通过。如果是编译没有通过的代码，没有任何人会愿意交付给自己的老板。但代码通过编译，只是说明了它的语法正确；我们却无法保证它的语义也一定正确，没有任何人可以轻易承诺这段代码的行为一定是正确的。
幸运的是，单元测试会为我们的承诺做保证。编写单元测试就是用来验证这段代码的行为是否与我们期望的一致。有了单元测试，我们可以自信的交付自己的代码，而没有任何的后顾之忧。
什么时候测试？单元测试越早越好，早到什么程度？XP开发理论讲究TDD，即测试驱动开发，先编写测试代码，再进行开发。在实际的工作中，可以不必过分强调先什么后什么，重要的是高效和感觉舒适。从老纳的经验来看，先编写产品函数的框架，然后编写测试函数，针对产品函数的功能编写测试用例，然后编写产品函数的代码，每写一个功能点都运行测试，随时补充测试用例。所谓先编写产品函数的框架，是指先编写函数空的实现，有返回值的随便返回一个值，编译通过后再编写测试代码，这时，函数名、参数表、返回类型都应该确定下来了，所编写的测试代码以后需修改的可能性比较小。
由谁测试？单元测试与其他测试不同，单元测试可看作是编码工作的一部分，应该由程序员完成，也就是说，经过了单元测试的代码才是已完成的代码，提交产品代码时也要同时提交测试代码。测试部门可以作一定程度的审核。
关于桩代码，老纳认为，单元测试应避免编写桩代码。桩代码就是用来代替某些代码的代码，例如，产品函数或测试函数调用了一个未编写的函数，可以编写桩函数来代替该被调用的函数，桩代码也用于实现测试隔离。采用由底向上的方式进行开发，底层的代码先开发并先测试，可以避免编写桩代码，这样做的好处有：减少了工作量；测试上层函数时，也是对下层函数的间接测试；当下层函数修改时，通过回归测试可以确认修改是否导致上层函数产生错误。
在一种传统的结构化编程语言中，比如C，要进行测试的单元一般是函数或子过程。在象C++这样的面向对象的语言中， 要进行测试的基本单元是类。对Ada语言来说，开发人员可以选择是在独立的过程和函数，还是在Ada包的级别上进行单元测试。单元测试的原则同样被扩展到第四代语言（4GL)的开发中，在这里基本单元被典型地划分为一个菜单或显示界面。一些流行的误解在明确了什么是单元测试以后，我们可以进行"反调论证"了。在下面的章节里，我们列出了一些反对单元测试的普遍的论点。然后用充分的理由来证明这些论点是不足取的。
它浪费了太多的时间
一旦编码完成，开发人员总是会迫切希望进行软件的集成工作，这样他们就能够看到实际的系统开始启动工作了。这在外表上看来是一项明显的进步，而象单元测试这样的活动也许会被看作是通往这个阶段点的道路上的障碍， 推迟了对整个系统进行联调这种真正有意思的工作启动的时间。
在这种开发步骤中，真实意义上的进步被外表上的进步取代了。系统能够正常工作的可能性是很小的，更多的情况是充满了各式各样的Bug。在实践中，这样一种开发步骤常常会导致这样的结果：软件甚至无法运行。更进一步的结果是大量的时间将被花费在跟踪那些包含在独立单元里的简单的Bug上面，在个别情况下，这些Bug也许是琐碎和微不足道的，但是总的来说，他们会导致在软件集成为一个系统时增加额外的工期， 而且当这个系统投入使用时也无法确保它能够可靠运行。
在实践工作中，进行了完整计划的单元测试和编写实际的代码所花费的精力大致上是相同的。一旦完成了这些单元测试工作，很多Bug将被纠正，在确信他们手头拥有稳定可靠的部件的情况下，开发人员能够进行更高效的系统集成工作。这才是真实意义上的进步，所以说完整计划下的单元测试是对时间的更高效的利用。而调试人员的不受控和散漫的工作方式只会花费更多的时间而取得很少的好处。
使用AdaTEST和Cantata这样的支持工具可以使单元测试更加简单和有效。但这不是必须的，单元测试即使是在没有工具支持的情况下也是一项非常有意义的活动。
它仅仅是证明这些代码做了什么
这是那些没有首先为每个单元编写一个详细的规格说明而直接跳到编码阶段的开发人员提出的一条普遍的抱怨， 当编码完成以后并且面临代码测试任务的时候，他们就阅读这些代码并找出它实际上做了什么，把他们的测试工作基于已经写好的代码的基础上。当然，他们无法证明任何事情。所有的这些测试工作能够表明的事情就是编译器工作正常。是的，他们也许能够抓住（希望能够）罕见的编译器Bug，但是他们能够做的仅仅是这些。
如果他们首先写好一个详细的规格说明，测试能够以规格说明为基础。代码就能够针对它的规格说明，而不是针对自身进行测试。这样的测试仍然能够抓住编译器的Bug，同时也能找到更多的编码错误，甚至是一些规格说明中的错误。好的规格说明可以使测试的质量更高，所以最后的结论是高质量的测试需要高质量的规格说明。
在实践中会出现这样的情况：一个开发人员要面对测试一个单元时只给出单元的代码而没有规格说明这样吃力不讨好的任务。你怎样做才会有更多的收获，而不仅仅是发现编译器的Bug？第一步是理解这个单元原本要做什么， --- 不是它实际上做了什么。比较有效的方法是倒推出一个概要的规格说明。这个过程的主要输入条件是要阅读那些程序代码和注释， 主要针对这个单元， 及调用它和被它调用的相关代码。画出流程图是非常有帮助的，你可以用手工或使用某种工具。可以组织对这个概要规格说明的走读（Review)，以确保对这个单元的说明没有基本的错误， 有了这种最小程度的代码深层说明，就可以用它来设计单元测试了。
我是个很棒的程序员， 我是不是可以不进行单元测试？
在每个开发组织中都至少有一个这样的开发人员，他非常擅长于编程，他们开发的软件总是在第一时间就可以正常运行，因此不需要进行测试。你是否经常听到这样的借口？
在真实世界里，每个人都会犯错误。即使某个开发人员可以抱着这种态度在很少的一些简单的程序中应付过去。但真正的软件系统是非常复杂的。真正的软件系统不可以寄希望于没有进行广泛的测试和Bug修改过程就可以正常工作。
编码不是一个可以一次性通过的过程。在真实世界中，软件产品必须进行维护以对操作需求的改变作出反应， 并且要对最初的开发工作遗留下来的Bug进行修改。你希望依靠那些原始作者进行修改吗？ 这些制造出这些未经测试的原始代码的资深专家们还会继续在其他地方制造这样的代码。在开发人员做出修改后进行可重复的单元测试可以避免产生那些令人不快的负作用。
不管怎样， 集成测试将会抓住所有的Bug
我们已经在前面的讨论中从一个侧面对这个问题进行了部分的阐述。这个论点不成立的原因在于规模越大的代码集成意味着复杂性就越高。如果软件的单元没有事先进行测试，开发人员很可能会花费大量的时间仅仅是为了使软件能够运行，而任何实际的测试方案都无法执行。
一旦软件可以运行了，开发人员又要面对这样的问题：在考虑软件全局复杂性的前提下对每个单元进行全面的测试。这是一件非常困难的事情，甚至在创造一种单元调用的测试条件的时候，要全面的考虑单元的被调用时的各种入口参数。在软件集成阶段，对单元功能全面测试的复杂程度远远的超过独立进行的单元测试过程。
最后的结果是测试将无法达到它所应该有的全面性。一些缺陷将被遗漏，并且很多Bug将被忽略过去。
让我们类比一下，假设我们要清洗一台已经完全装配好的食物加工机器！无论你喷了多少水和清洁剂，一些食物的小碎片还是会粘在机器的死角位置，只有任其腐烂并等待以后再想办法。但我们换个角度想想，如果这台机器是拆开的， 这些死角也许就不存在或者更容易接触到了，并且每一部分都可以毫不费力的进行清洗。成本效率不高一个特定的开发组织或软件应用系统的测试水平取决于对那些未发现的Bug的潜在后果的重视程度。这种后果的严重程度可以从一个Bug引起的小小的不便到发生多次的死机的情况。这种后果可能常常会被软件的开发人员所忽视（但是用户可不会这样），这种情况会长期的损害这些向用户提交带有Bug的软件的开发组织的信誉，并且会导致对未来的市场产生负面的影响。相反地，一个可靠的软件系统的良好的声誉将有助于一个开发组织获取未来的市场。
很多研究成果表明，无论什么时候作出修改都要进行完整的回归测试，在生命周期中尽早地对软件产品进行测试将使效率和质量得到最好的保证。Bug发现的越晚，修改它所需的费用就越高，因此从经济角度来看， 应该尽可能早的查找和修改Bug。在修改费用变的过高之前，单元测试是一个在早期抓住Bug的机会。
相比后阶段的测试，单元测试的创建更简单，维护更容易，并且可以更方便的进行重复。从全程的费用来考虑， 相比起那些复杂且旷日持久的集成测试，或是不稳定的软件系统来说，单元测试所需的费用是很低的。
相关图表
这些图表摘自<<实用软件度量>>(Capers Jones，McGraw-Hill 1991)，它列出了准备测试，执行测试，和修改缺陷所花费的时间（以一个功能点为基准），这些数据显示单元测试的成本效率大约是集成测试的两倍 系统测试的三倍（参见条形图）。
(术语域测试（Field test)意思是在软件投入使用以后，针对某个领域所作的所有测试活动）
这个图表并不表示开发人员不应该进行后阶段的测试活动，这次测试活动仍然是必须的。它的真正意思是尽可能早的排除尽可能多的Bug可以减少后阶段测试的费用。
其他的一些图表显示高达50%的维护工作量被花在那些总是会有的Bug的修改上面。如果这些Bug在开发阶段被排除掉的话，这些工作量就可以节省下来。当考虑到软件维护费用可能会比最初的开发费用高出数倍的时候，这种潜在的对50%软件维护费用的节省将对整个软件生命周期费用产生重大的影响。
结论
经验表明一个尽责的单元测试方法将会在软件开发的某个阶段发现很多的Bug，并且修改它们的成本也很低。在软件开发的后期阶段，Bug的发现并修改将会变得更加困难，并要消耗大量的时间和开发费用。无论什么时候作出修改都要进行完整的回归测试，在生命周期中尽早地对软件产品进行测试将使效率和质量得到最好的保证。在提供了经过测试的单元的情况下，系统集成过程将会大大地简化。开发人员可以将精力集中在单元之间的交互作用和全局的功能实现上，而不是陷入充满很多Bug的单元之中不能自拔。
使测试工作的效力发挥到最大化的关键在于选择正确的测试策略，这其中包含了完全的单元测试的概念，以及对测试过程的良好的管理，还有适当地使用象AdaTEST和Cantata这样的工具来支持测试过程。这些活动可以产生这样的结果：在花费更低的开发费用的情况下得到更稳定的软件。更进一步的好处是简化了维护过程并降低了生命周期的费用。有效的单元测试是推行全局质量文化的一部分，而这种质量文化将会为软件开发者带来无限的商机。
优点
1、它是一种验证行为。
程序中的每一项功能都是测试来验证它的正确性。它为以后的开发提供支援。就算是开发后期，我们也可以轻松的增加功能或更改程序结构，而不用担心这个过程中会破坏重要的东西。而且它为代码的重构提供了保障。这样，我们就可以更自由的对程序进行改进。
2、它是一种设计行为。
编写单元测试将使我们从调用者观察、思考。特别是先写测试（test-first），迫使我们把程序设计成易于调用和可测试的，即迫使我们解除软件中的耦合。
3、它是一种编写文档的行为。
单元测试是一种无价的文档，它是展示函数或类如何使用的最佳文档。这份文档是可编译、可运行的，并且它保持最新，永远与代码同步。
4、它具有回归性。
自动化的单元测试避免了代码出现回归，编写完成之后，可以随时随地的快速运行测试。
范畴
如果要给单元测试定义一个明确的范畴，指出哪些功能是属于单元测试，这似乎很难。但下面讨论的四个问题，基本上可以说明单元测试的范畴，单元测试所要做的工作。
1、 它的行为和我期望的一致吗？
这是单元测试最根本的目的，我们就是用单元测试的代码来证明它所做的就是我们所期望的。
2、 它的行为一直和我期望的一致吗？
编写单元测试，如果只测试代码的一条正确路径，让它正确走一遍，并不算是真正的完成。软件开发是一项复杂的工程，在测试某段代码的行为是否和你的期望一致时，你需要确认：在任何情况下，这段代码是否都和你的期望一致；譬如参数很可疑、硬盘没有剩余空间、缓冲区溢出、网络掉线的时候。
3、 我可以依赖单元测试吗？
不能依赖的代码是没有多大用处的。既然单元测试是用来保证代码的正确性，那么单元测试也一定要值得依赖。
4、 单元测试说明我的意图了吗？
单元测试能够帮我们充分了解代码的用法，从效果上而言，单元测试就像是能执行的文档，说明了在你用各种条件调用代码时，你所能期望这段代码完成的功能。
不写接口
到这里，我们已经列举了使用单元测试的种种理由。也许，每个人都同意，是的，该做更多的测试。这种人人同意的事情还多着呢，是的，该多吃蔬菜，该戒烟，该多休息，该多锻炼……这并不意味着我们中的所有人都会这么去做，不是吗？
1、 编写单元测试太花时间了。
我们知道，在开发时越早发现BUG，就能节省更多的时间，降低更多的风险。
下图表摘自<<实用软件度量>>(Capers Jones，McGraw-Hill 1991)，它列出了准备测试，执行测试，和修改缺陷所花费的时间（以一个功能点为基准），这些数据显示单元测试的成本效率大约是集成测试的两倍，是系统测试的三倍（参见条形图）。
术语：域测试（Field test)意思是在软件投入使用以后，针对某个领域所作的所有测试活动。
如果你仍然认为在编写产品代码的时候，还是没有时间编写测试代码，那么请先考虑下面这些问题：
1）、对于所编写的代码，你在调试上面花了多少时间。
2）、对于以前你自认为正确的代码，而实际上这些代码却存在重大的bug，你花了多少时间在重新确认这些代码上面。
3）、对于一个别人报告的bug，你花了多少时间才找出导致这个bug 的源码位置。
回答完这些问题，你一定不再以“太花时间”作为拒绝单元测试的借口。
2、 运行测试的时间太长了。
合适的测试是不会让这种情况发生的。实际上，大多数测试的执行都是非常快的，因此你在几秒之内就可以运行成千上万个测试。但是有时某些测试会花费很长的时间。这时，需要把这些耗时的测试和其他测试分开。通常可以每天运行这种测试一次，或者几天一次。
3、 测试代码并不是我的工作。
你的工作就是保证代码能够正确的完成你的行为，恰恰相反，测试代码正是你不可缺少的工作。
4、 我并不清楚代码的行为，所以也就无从测试。
如果你实在不清楚代码的行为，那么估计现在并不是编码的时候。如果你并不知道代码的行为，那么你又如何知道你编写的代码是正确的呢
5、 但是这些代码都能够编译通过。
我们前面已经说过，代码通过编译只是验证它的语法通过。但并不能保证它的行为就一定正确。
6、 公司请我来是为了写代码，而不是写测试。
公司付给你薪水是为了让你编写产品代码，而单元测试大体上是一个工具，是一个和编辑器、开发环境、编译器等处于同一位置的工具。
7、 如果我让测试员或者QA（Quality Assurance）人员没有工作，那么我会觉得很内疚。
你并不需要担心这些。请记住，我们在此只是谈论单元测试，而它只是一种针对源码的、低层次的，为程序员而设计的测试。在整个项目中，还有其他的很多测试需要这些人来完成，如：功能测试、验收测试、性能测试、环境测试、有效性测试、正确性测试、正规分析等等。
8、 我的公司并不会让我在真实系统中运行单元测试。
我们所讨论的只是针对开发者的单元测试。也就是说，如果你可以在其他的环境下（例如在正式的产品系统中）运行这些测试的话，那么它们就不再是单元测试，而是其他类型的测试了。实际上，你可以在你的本机运行单元测试，使用你自己的数据库，或者使用mock 对象。
代码编写
[1]　多数讲述单元测试的文章都是以Java为例，本文以C++为例，后半部分所介绍的单元测试工具也只介绍C++单元测试工具。下面的示例代码的开发环境是VC6.0。产品类class CMyClass
{
public:
int Add(int i,int j);
CMyClass();
virtual ~CMyClass();
private:
int mAge; //年龄
CString mPhase; //年龄阶段，如"少年"，"青年"
};
建立对应的测试类CMyClassTester，为了节约编幅，只列出源文件的代码：
void CMyClassTester::CaseBegin()
{
//pObj是CMyClassTester类的成员变量，是被测试类的对象的指针，
//为求简单，所有的测试类都可以用pObj命名被测试对象的指针。
pObj = new CMyClass();
}
void CMyClassTester::CaseEnd()
{
delete pObj;
}
测试类的函数CaseBegin()和CaseEnd()建立和销毁被测试对象，每个测试用例的开头都要调用CaseBegin()，结尾都要调用CaseEnd()。产品函数接下来，我们建立示例的产品函数：
int CMyClass::Add(int i,int j)
{
return i+j;
}
和对应的测试函数：
void CMyClassTester::Add_int_int()
{
}
把参数表作为函数名的一部分，这样当出现重载的被测试函数时，测试函数不会产生命名冲突。下面添加测试用例：
void CMyClassTester::Add_int_int()
{
//第一个测试用例
CaseBegin();{ //1
int i = 0; //2
int j = 0; //3
int ret = pObj->Add(i,j); //4
ASSERT(ret == 0); //5
}CaseEnd(); //6
}解释第1和第6行建立和销毁被测试对象，所加的{}是为了让每个测试用例的代码有一个独立的域，以便多个测试用例使用相同的变量名。
第2和第3行是定义输入数据，第4行是调用被测试函数，这些容易理解，不作进一步解释。第5行是预期输出，它的特点是当实际输出与预期输出不同时自动报错，ASSERT是VC的断言宏，也可以使用其他类似功能的宏，使用测试工具进行单元测试时，可以使用该工具定义的断言宏。
示例中的格式显得很不简洁，2、3、4、5行可以合写为一行：ASSERT(pObj->Add(0,0) == 0);但这种不简洁的格式却是老纳极力推荐的，因为它一目了然，易于建立多个测试用例，并且具有很好的适应性，同时，也是极佳的代码文档，总之，老纳建议：输入数据和预期输出要自成一块。
建立了第一个测试用例后，应编译并运行测试，以排除语法错误，然后，使用拷贝/修改的办法建立其他测试用例。由于各个测试用例之间的差别往往很小，通常只需修改一两个数据，拷贝/修改是建立多个测试用例的最快捷办法。
测试用例
下面说说测试用例、输入数据及预期输出。输入数据是测试用例的核心，老纳对输入数据的定义是：被测试函数所读取的外部数据及这些数据的初始值。外部数据是对于被测试函数来说的，实际上就是除了局部变量以外的其他数据，老纳把这些数据分为几类：参数、成员变量、全局变量、IO媒体。IO媒体是指文件、数据库或其他储存或传输数据的媒体，例如，被测试函数要从文件或数据库读取数据，那么，文件或数据库中的原始数据也属于输入数据。一个函数无论多复杂，都无非是对这几类数据的读取、计算和写入。预期输出是指：返回值及被测试函数所写入的外部数据的结果值。返回值就不用说了，被测试函数进行了写操作的参数（输出参数）、成员变量、全局变量、IO媒体，它们的预期的结果值都是预期输出。一个测试用例，就是设定输入数据，运行被测试函数，然后判断实际输出是否符合预期。下面举一个与成员变量有关的例子：产品函数void CMyClass::Grow(int years)
{
mAge += years;
if(mAge < 10)
mPhase = "儿童";
else if(mAge <20)
mPhase = "少年";
else if(mAge <45)
mPhase = "青年";
else if(mAge <60)
mPhase = "中年";
else
mPhase = "老年";
}
测试函数中的一个测试用例：
CaseBegin();{
int years = 1;
pObj->mAge = 8;
pObj->Grow(years);
ASSERT( pObj->mAge == 9 );
ASSERT( pObj->mPhase == "儿童" );
}CaseEnd();
在输入数据中对被测试类的成员变量mAge进行赋值，在预期输出中断言成员变量的值。现在可以看到老纳所推荐的格式的好处了吧，这种格式可以适应很复杂的测试。在输入数据部分还可以调用其他成员函数，例如：执行被测试函数前可能需要读取文件中的数据保存到成员变量，或需要连接数据库，老纳把这些操作称为初始化操作。例如，上例中 ASSERT( ...)之前可以加pObj->OpenFile();。为了访问私有成员，可以将测试类定义为产品类的友元类。例如，定义一个宏：
#define UNIT_TEST(cls) friend class cls##Tester;
然后在产品类声明中加一行代码：UNIT_TEST(ClassName)。测试用例设计下面谈谈测试用例设计。前面已经说了，测试用例的核心是输入数据。预期输出是依据输入数据和程序功能来确定的，也就是说，对于某一程序，输入数据确定了，预期输出也就可以确定了，至于生成/销毁被测试对象和运行测试的语句，是所有测试用例都大同小异的，因此，我们讨论测试用例时，只讨论输入数据。
前面说过，输入数据包括四类：参数、成员变量、全局变量、IO媒体，这四类数据中，只要所测试的程序需要执行读操作的，就要设定其初始值，其中，前两类比较常用，后两类较少用。显然，把输入数据的所有可能取值都进行测试，是不可能也是无意义的，我们应该用一定的规则选择有代表性的数据作为输入数据，主要有三种：正常输入，边界输入，非法输入，每种输入还可以分类，也就是平常说的等价类法，每类取一个数据作为输入数据，如果测试通过，可以肯定同类的其他输入也是可以通过的。下面举例说明：
正常输入
例如字符串的Trim函数，功能是将字符串前后的空格去除，那么正常的输入可以有四类：前面有空格；后面有空格；前后均有空格；前后均无空格。
边界输入
上例中空字符串可以看作是边界输入。
再如一个表示年龄的参数，它的有效范围是0-100，那么边界输入有两个：0和100。
非法输入
非法输入是正常取值范围以外的数据，或使代码不能完成正常功能的输入，如上例中表示年龄的参数，小于0或大于100都是非法输入，再如一个进行文件操作的函数，非法输入有这么几类：文件不存在；目录不存在；文件正在被其他程序打开；权限错误。
如果函数使用了外部数据，则正常输入是肯定会有的，而边界输入和非法输入不是所有函数都有。一般情况下，即使没有设计文档，考虑以上三种输入也可以找出函数的基本功能点。实际上，单元测试与代码编写是“一体两面”的关系，编码时对上述三种输入都是必须考虑的，否则代码的健壮性就会成问题。
白盒覆盖
上面所说的测试数据都是针对程序的功能来设计的，就是所谓的黑盒测试。单元测试还需要从另一个角度来设计测试数据，即针对程序的逻辑结构来设计测试用例，就是所谓的白盒测试。在老纳看来，如果黑盒测试是足够充分的，那么白盒测试就没有必要，可惜“足够充分”只是一种理想状态，例如：真的是所有功能点都测试了吗？程序的功能点是人为的定义，常常是不全面的；各个输入数据之间，有些组合可能会产生问题，怎样保证这些组合都经过了测试？难于衡量测试的完整性是黑盒测试的主要缺陷，而白盒测试恰恰具有易于衡量测试完整性的优点，两者之间具有极好的互补性，例如：完成功能测试后统计语句覆盖率，如果语句覆盖未完成，很可能是未覆盖的语句所对应的功能点未测试。
白盒测试针对程序的逻辑结构设计测试用例，用逻辑覆盖率来衡量测试的完整性。逻辑单位主要有：语句、分支、条件、条件值、条件值组合，路径。语句覆盖就是覆盖所有的语句，其他类推。另外还有一种判定条件覆盖，其实是分支覆盖与条件覆盖的组合，在此不作讨论。跟条件有关的覆盖就有三种，解释一下：条件覆盖是指覆盖所有的条件表达式，即所有的条件表达式都至少计算一次，不考虑计算结果；条件值覆盖是指覆盖条件的所有可能取值，即每个条件的取真值和取假值都要至少计算一次；条件值组合覆盖是指覆盖所有条件取值的所有可能组合。老纳做过一些粗浅的研究，发现与条件直接有关的错误主要是逻辑操作符错误，例如：||写成&&，漏了写！什么的，采用分支覆盖与条件覆盖的组合，基本上可以发现这些错误，另一方面，条件值覆盖与条件值组合覆盖往往需要大量的测试用例，因此，在老纳看来，条件值覆盖和条件值组合覆盖的效费比偏低。老纳认为效费比较高且完整性也足够的测试要求是这样的：完成功能测试，完成语句覆盖、条件覆盖、分支覆盖、路径覆盖。做过单元测试的朋友恐怕会对老纳提出的测试要求给予一个字的评价：晕！或者两个字的评价：狂晕！因为这似乎是不可能的要求，要达到这种测试完整性，其测试成本是不可想象的，不过，出家人不打逛语，老纳之所以提出这种测试要求，是因为利用一些工具，可以在较低的成本下达到这种测试要求，后面将会作进一步介绍。
关于白盒测试用例的设计，程序测试领域的书籍一般都有讲述，普通方法是画出程序的逻辑结构图如程序流程图或控制流图，根据逻辑结构图设计测试用例，这些是纯粹的白盒测试，不是老纳想推荐的方式。老纳所推荐的方法是：先完成黑盒测试，然后统计白盒覆盖率，针对未覆盖的逻辑单位设计测试用例覆盖它，例如，先检查是否有语句未覆盖，有的话设计测试用例覆盖它，然后用同样方法完成条件覆盖、分支覆盖和路径覆盖，这样的话，既检验了黑盒测试的完整性，又避免了重复的工作，用较少的时间成本达到非常高的测试完整性。不过，这些工作可不是手工能完成的，必须借助于工具，后面会介绍可以完成这些工作的测试工具。
测试工具
现在开始介绍单元测试工具，分别按编程语言进行分组介绍。C/C++CppUnit
首先是CppUnit，这是C++单元测试工具的鼻祖，免费的开源的单元测试框架。由于已有一众高人写了不少关于CppUnit的很好的文章，老纳就不现丑了，想了解CppUnit的朋友，建议读一下Cpluser 所作的《CppUnit测试框架入门》，。该文也提供了CppUnit的下载地址。
C++Test
然后介绍C++Test，这是Parasoft公司的产品。[C++Test是一个功能强大的自动化C/C++单元级测试工具，可以自动测试任何C/C++函数、类，自动生成测试用例、测试驱动函数或桩函数，在自动化的环境下极其容易快速的将单元级的测试覆盖率达到100%]。[]内的文字引自，这是华唐公司的网页。老纳想写些介绍C++Test的文字，但发现无法超越华唐公司的网页上的介绍，所以也就省点事了，想了解C++Test的朋友，建议访问该公司的网站。华唐公司代理C++Test，想要购买或索取报价、试用版都可以找他们。
Visual Unit
最后介绍Visual Unit，简称VU，这是国产的单元测试工具，据说申请了多项专利，拥有一批创新的技术，不过老纳只关心是不是有用和好用。[自动生成测试代码 快速建立功能测试用例 程序行为一目了然 极高的测试完整性 高效完成白盒覆盖 快速排错 高效调试 详尽的测试报告]。[]内的文字是VU开发商的网页上摘录的，。前面所述测试要求：完成功能测试，完成语句覆盖、条件覆盖、分支覆盖、路径覆盖，用VU可以轻松实现，还有一点值得一提：使用VU还能提高编码的效率，总体来说，在完成单元测试的同时，编码调试的时间还能大幅度缩短。算了，不想再讲了，老纳显摆理论、介绍经验还是有兴趣的，因为可以满足老纳好为人师的虚荣心，但介绍工具就觉得索然无味了，毕竟工具好不好用，合不合用，要试过才知道，还是自己去开发商的网站看吧，可以下载演示版，还有演示课件。
gtest
gtest测试框架是在不同平台上（Linux，Mac OS X，Windows，Cygwin，Windows CE和Symbian）为编写C++测试而生成的。它是基于xUnit架构的测试框架，支持自动发现测试，丰富的断言集，用户定义的断言，death测试，致命与非致命的失败，类型参数化测试，各类运行测试的选项和XML的测试报告。需要详细了解的朋友可以参阅《玩转Google单元测试框架gtest系列》该篇文章。C#Visual Build ProfessionalJavaJUnit
JUnit 是 Java 社区中知名度最高的单元测试工具。它诞生于 1997 年，由 Erich Gamma 和 Kent Beck 共同开发完成。其中 Erich Gamma 是经典著作《设计模式：可复用面向对象软件的基础》一书的作者之一，并在 Eclipse 中有很大的贡献；Kent Beck 则是一位极限编程（XP）方面的专家和先驱。JUnit 设计的非常小巧，但是功能却非常强大。JUnit ——是一个开发源代码的Java测试框架，用于编写和运行可重复的测试。他是用于单元测试框架体系xUnit的一个实例（用于java语言）。主要用于白盒测试，回归测试。
JUnit的好处和JUnit单元测试编写原则：
好处：可以使测试代码与产品代码分开；针对某一个类的测试代码通过较少的改动便可以应用于另一个类的测试；易于集成到测试人员的构建过程中，JUnit和Ant的结合可以实施增量开发；JUnit是公开源代码的，可以进行二次开发；可以方便地对JUnit进行扩展；
编写原则：是简化测试的编写，这种简化包括测试框架的学习和实际测试单元的编写；是使测试单元保持持久性；是可以利用既有的测试来编写相关的测试；
JUnit使用帮助
1、junit3.x版本，我们通常使用junit 3.8[2]
(1)、使用junit3.x版本进行单元测试时，测试类必须要继承于TestCase父类；
(2)、测试方法需要遵循的原则：
A、public的
B、void的
C、无方法参数
D、方法名称必须以test开头
(3)、不同的Test Case之间一定要保持完全的独立性，不能有任何的关联。
(4)、我们要掌握好测试方法的顺序，不能依赖于测试方法自己的执行顺序。
dome:
public class TestMyNumber extends TestCase {
private MyNumber myNumber;
public TestMyNumber(String name) {
super(name);
}
// 在每个测试方法执行 [之前] 都会被调用
@Override
public void setUp() throws Exception {
// System.out.println("欢迎使用Junit进行单元测试…");
myNumber = new MyNumber();
}
// 在每个测试方法执行 [之后] 都会被调用
@Override
public void tearDown() throws Exception {
// System.out.println("Junit单元测试结束…");
}
public void testDivideByZero() {
Throwable te = null;
try {
myNumber.divide(6, 0);
Assert.fail("测试失败");
} catch (Exception e) {
e.printStackTrace();
te = e;
}
Assert.assertEquals(Exception.class, te.getClass());
Assert.assertEquals("除数不能为 0 ", te.getMessage());
}
}
2、junit4.x版本[2]
(1)、使用junit4.x版本进行单元测试时，不用测试类继承TestCase父类，因为，junit4.x全面引入了Annotation来执行我们编写的测试。
(2)、junit4.x版本，引用了注解的方式，进行单元测试；
(3)、junit4.x版本我们常用的注解：
A、@Before 注解：与junit3.x中的setUp()方法功能一样，在每个测试方法之前执行；
B、@After 注解：与junit3.x中的tearDown()方法功能一样，在每个测试方法之后执行；
C、@BeforeClass 注解：在所有方法执行之前执行；
D、@AfterClass 注解：在所有方法执行之后执行；
E、@Test(timeout = xxx) 注解：设置当前测试方法在一定时间内运行完，否则返回错误；
F、@Test(expected = Exception.class) 注解：设置被测试的方法是否有异常抛出。抛出异常类型为：Exception.class；
G、@Ignore 注解：注释掉一个测试方法或一个类，被注释的方法或类，不会被执行。
dome:
package com.an.junit;
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
public class TestMyNumber {
private MyNumber myNumber;
@BeforeClass
// 在所有方法执行之前执行
public static void globalInit() {
System.out.println("init all method...");
}
@AfterClass
// 在所有方法执行之后执行
public static void globalDestory() {
System.out.println("destory all method...");
}
@Before
// 在每个测试方法之前执行
public void setUp() {
System.out.println("start setUp method");
myNumber = new MyNumber();
}
@After
// 在每个测试方法之后执行
public void tearDown() {
System.out.println("end tearDown method");
}
@Test(timeout=600)// 设置限定测试方法的运行时间 如果超出则返回错误
public void testAdd() {
System.out.println("testAdd method");
int result = myNumber.add(2, 3);
assertEquals(5, result);
}
@Test
public void testSubtract() {
System.out.println("testSubtract method");
int result = myNumber.subtract(1, 2);
assertEquals(-1, result);
}
@Test
public void testMultiply() {
System.out.println("testMultiply method");
int result = myNumber.multiply(2, 3);
assertEquals(6, result);
}
@Test
public void testDivide() {
System.out.println("testDivide method");
int result = 0;
try {
result = myNumber.divide(6, 2);
} catch (Exception e) {
fail();
}
assertEquals(3, result);
}
@Test(expected = Exception.class)
public void testDivide2() throws Exception {
System.out.println("testDivide2 method");
myNumber.divide(6, 0);
fail("test Error");
}
public static void main(String[] args) {
}
}
有兴趣的朋友可以下下来仔细研究下，也可以到安安DIY创作室博客一起讨论一下。
JUnit-addons
对JUnit的一些补充，比如设置、获取被测试对象的私有属性的值，调用被测试对象的私有方法等。
常用类：junitx.util.PrivateAccessor
Spring 测试框架
可以测试基于Spring的应用，通过配置文件和注解自动组装需要的单元测试对象。
提供了一些常用的J2EE Mock对象，比如HttpSession的Mock类等。
可以支持数据库自动回滚，以防止对数据库的单元测试（插入，删除等）不可重复执行，防止修改数据库状态等。
DJUnit
通过代码自动产生Mock对象，省去了自己手动编写N多的Mock类。
此外，它的Eclipse插件还可以做到测试覆盖率、分支统计。
EasyMock 
功能同DJUnit，也是通过编程自动Mock掉与测试对象无关的类，方法。
国内现状
国内目前很多软件公司的单元测试还很不正规，只是由开发人员来简单地编译和调试一下自己的程序，没有相应的单元测试计划、单元测试用例和代码覆盖率的统计。对于单元测试这个环节，很多都是走过场的。不少程序员觉得任务大、时间赶、人手少，一接到任务就是先赶代码完成工作量了，这其实是很普遍的现象.。而且，绝大部分程序员从骨子里不喜欢写单元测试，这是不争的事实。
如何给程序员减压，但又能做好单元测试呢?
中小企业的程序员和项目经理，一般面对的都是压力大、任务重的项目。 如果作为项目经理的你，觉得测试组有人(有人就行了,多少倒不大重要)，不妨让测试组的人早点介入单元测试，又或者假如测试组的人起码能写点代码，那其实更好，那么分配测试组的人去写单元测试，这其实是很有好处的。
这其中有一个值得一提的问题，大部分业务可以确定下来，但并非全部的业务。很多时候连客户不知道自己真正要什么，实现了之后客户不满意，就要再整理需求再改代码。这种情况决定了不可能先写测试再写实现，如果只写实现，那么客户要求改时只改实现代码，如果是先写单元测试，那么改程序的时候要改两份代码。
是不是可以这样？已经确定的业务，让程序员和测试人员在动手写一个模块前，先让他们讨论这个模块的单元测试策略，这样可以减轻程序员的负担。双方指定单元测试的框架流程，程序员不编写单元测试代码，但由于程序员参与了讨论，因此心里会更清楚。由测试人员编写单元测试代码。 程序员写完代码后，由测试人员编写的单元测试代码去对碰程序员的代码，得出相关的测试报告。好处是，职责分离了，测试组的人能提前介入，对以后的集成测试很有好处，而且可以让测试人员写点测试代码，好让他们不闲着，有点成就感。而且程序员的负担减少了，虽然程序员不写单元测试代码了，但由于一开始跟测试人员在一起，会对测试流程熟悉，对代码编写很有好处。对于没有确定的业务，就暂时先实现。
千万不要等到项目后期再进行单元测试，那样就失去检查代码、预防缺陷的意义了。