新西兰蜜月游 之二

新西兰的交通习惯和我们恰好相反,驾驶室在右侧,车辆靠左行驶,环岛是顺时针绕的,车上的灯光杆在右侧,左边是雨刮器。当然,油门和刹车方向全球一致,左边刹车,右边油门。这些区别都是开了两三天以后,才慢慢习惯,刚刚开始,转弯之前总是回搬左边的雨刮器,在路上也会走到逆行车道上。

第一天

从机场出来,直接开Google Map的导航(Google Map也将是我们未来15天在新西兰最重要的工具,没有之一)去我们的第一个住所Olive House B&B。我们选的这一家在booking.com上评价不错,老板娘是西安人。新西兰有很多的B&B,Bed and Breakfast,就是家庭旅馆。新西兰严重的地广人稀,所以很多人家都是住一个大平层,几个卧室,新西兰政府会给他们授权,多出来的卧室可以用来招待游客。

OliveHouseB&B

Olive House离机场20分钟左右的路程,附近都是和他家一样的大平层。作为客房的是两间卧室,共用一个很大的洗手间。他们每次只会招待一拨客人,即使像我们这样只需要一间卧室,另一间就空着。我们卧室很干净,有一个很大的落地窗,对着后院的草坪。行李放好,时间还早,才下午两点多,向老板娘打听了附近超市的位置,去买了一点零食,瓶装水和著名的新西兰水果。不知是不得要领还是怎么的,在这家超市买的提子相当不好吃。超市出来也还太早,干脆去传说中的Summer Beach看看。

- 阅读剩余部分 -

新西兰蜜月游 之一

坐在皇后镇酒店的沙发上,面对着Wakatipu湖开始写这次出行的第一篇游记。

之前就一直在纠结去哪里度蜜月,考虑过欧洲,北美,新西兰几个地方。由于各种办婚礼,各种双11,各种的各种,至少要到11月中下旬才能成行,初冬,所以直接Pass了欧洲和北美两个北半球地区,而且我们的原则是,坚决不跟团,我们自己的蜜月,自己做主!最终决定了南到接近南极圈的——新西兰南岛自驾游

决定了出行地点和出行时间,就开始做准备:机票,租车,签证,攻略,装备,预定,等等。。。

机票

之前有朋友从香港转机飞新西兰,结果由于晚点在香港耽误了一天,所以我们决定选新西兰航空上海直飞。我们去南岛目的地基督城,需要先飞到奥克兰,再转机。

新西兰航空飞这条线的有一班时间非常好,北京时间下午2:15起飞,奥克兰当地时间早晨7:00落地,然后换2小时后9:00的飞机,1小时20分钟后到达基督城。这一班飞机在上海,算上90分钟提前进闸,12点半到机场即可,我们从杭州坐8:30的大巴到浦东机场刚刚好,顺利的话甚至还有时间可以在安检外边吃个饭。到了基督城,办理各种手续后也刚好时午饭时间。

- 阅读剩余部分 -

iOS开发中的单元测试(三)——URLManager中的测试用例解析

本文首发于 InfoQ中文站

URLManager是一个基于UINavigationController和UIViewController,以URL Scheme为设计基础的导航控件,目的是实现ViewController的松耦合,不依赖。

准备框架,定义基类

首先按照之前的两篇文章介绍的方法导入单元测试框架和匹配引擎框架,建立好测试Target,并配置编译选项。

定义测试用例基类:UMTestCase(代码1),其他用例全部继承自UMTestCase。

#import 
@interface UMTestCase : GHTestCase
@end

代码1,UMTestCase,用例基类

构建用例

URLManager工具类(UMTools)测试用例(UMToolsTestCase)。UMTools中扩展了NSURL,NSString和UIView,方法涉及到给URL添加QueryString和从QueryString中读取参数,对字符串做子串判断,进行URL的编码和解码,对UIView的x,y,width和height的直接读写等。需要在用例中定义测试过程中会使用到属性(代码2), 并在setUpClass中初始化他们(代码3)。

- 阅读剩余部分 -

iOS开发中的单元测试(二)

本文首发于 InfoQ中文站

上一篇文章简单介绍了OCUnit和GHUnit两款iOS开发中较为常见的单元测试框架,本文进一步介绍单元测试中的另一利器——匹配引擎(Matcher Engine)。匹配引擎可以替代断言方法,配合单元测试引擎使用,测试用例可以更多样化,更细致。

传统断言提供的方法数量和功能都有限,以导读中提到的两款框架为例,即使是断言相对丰富的GHUnit也只是提供了38种断言方法,范围仅涵盖了逻辑比较,异常和出错等少数几方面,仍然很单一。而使用匹配引擎代替断言,可能性就大大丰富了,除了普通断言支持的规则,一般的引擎还默认提供了包含,区间,继承关系等。更重要的是,使用匹配引擎开发者可以自行开发匹配规则,引入与业务相关的逻辑判断。

本文要介绍两款匹配引擎,一款就是Hamcrest的Objective-C实现——OCHamcrest,另一款则是专为Objective-C/Cocoa而生的后来者——Expecta。接下来将结合GHUnitTest,介绍两款匹配引擎如何在单元测试中发挥作用(有关GHUnitTest参考《iOS开发中的单元测试(一)》

- 阅读剩余部分 -

iOS开发中的单元测试(一)

本文首发于 InfoQ中文站

导读:本文不讨论单元测试是什么,或者它之于一个工程的利弊,我认为单元测试是一个开发者保证产出代码质量的有效工具。本文从使用者的角度对比当下比较流行的两款单元测试框架,给大家提供一些选用建议。如果你还不甚了解单元测试在工程中所起到的作用,或者还不知道TDD的开发模式,可参考:Test-Driven DevelopmentUnit Testing

本文对比两个iOS开发中常见的单元测试框架:OCUnit,被官方集成进XCode 4.x版本中;GHUnit,被推荐最多的测试框架,带GUI界面。初窥两款测试框架非常相似,而上手使用就会发现其中的区别。细节上的区别使两款框架在不同角度各有优劣。


- 阅读剩余部分 -