iOS开发中的单元测试(二) 让断言活泼起来的匹配引擎

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

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

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

OCHamcrest

介绍匹配引擎必须要提Hamcrest,几乎已经成为匹配引擎的代名词。官网首页上 的一句话表明了它的身世:“Born in Java, Hamcrest now has implementations in a number of languages.”。这款诞生于Java的匹配引擎现在还支持除Java的Python、Ruby、PHP、Erlang和Objective-C。

加入工程

在iOS工程中使用OCHamcrest需要先获取OCHamcrestIOS.framework,可以从Quality Coding直接下载,或 在Github上获取源码编译。注意:Github上托管的OCHamcrest工程以Submodule的形式关联源代码,因此如果 使用命令行方式clone工程,需要执行“git submodule update --init”。

下载源码后,进入Source 目录,执行MakeDistribution.sh脚本,将会在Source/build/Release下生成OCHamcrest.framework、 OCHamcrestIOS.framework和OCHamcrest.framework.dSYM , OCHamcrestIOS.framework就是iOS工程中需要用 到的框架,如图1。

图1,从源码编译生成 OCHamcrestIOS.framework

打开已经安装了GHUnitTest的工程,把OCHamcrestIOS.framework添加到单 元测试的Target中。在需要使用匹配引擎的用例中,定义“HC_SHORTHAND”并导入 “<OCHamcrestIOS/OCHamcrestIOS.h>”(如图2)。

图2,把 OCHamcrestIOS.framework导入工程

至此OCHamcrest已经安装完成,可以再测试用例中使用匹配规则代 替GHUnitTest的断言方法。

时间: 2024-11-01 07:57:40

iOS开发中的单元测试(二) 让断言活泼起来的匹配引擎的相关文章

iOS开发中的单元测试(一) 对比OCUnit和GHUnit

本文不讨论单元测试是什么,或者它之于一个工程的利弊,我认为单元测试是一个开发者保证产出代码质 量的有效工具.本文从使用者的角度对比当下比较流行的两款单元测试框架,给大家提供一些选用建议.如果 你还不甚了解单元测试在工程中所起到的作用,或者还不知道TDD的开发模式,可参考:Test-Driven Development和Unit Testing. 本文对比两个iOS开发中常见的单元测试框架:OCUnit,被官方集成进XCode 4.x版本中:GHUnit,被推荐 最多的测试框架,带GUI界面.初窥

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

URLManager是一个基于UINavigationController和UIViewController,以URL Scheme为设计基础的导航控件,目的是实现ViewController的松耦合,不依赖. 准备框架,定义基类 首先按照之前的两篇文章介绍的方法导入单元测试框架和匹配引擎框架,建立好测试Target,并配置编译选项. 定义测试用例基类:UMTestCase(代码1),其他用例全部继承自UMTestCase. #import <GHUnitIOS/GHTestCase.h> @

关于android/ios开发中的单元测试

很多开发人员,特别是小公司的开发人员,基本上从来不用单元测试,认为直接开发既快又好,还要做单元测试浪费时间和精力.但大公司相反,比较看重单元测试.因为有单元测试的代码,相对稳定可靠,而且如果开发人员习惯了以测试为驱动的开发,也会觉得这样的方式很不错. 以测试为驱动的开发模式是:开发之前,先想好要做什么,然后把对外的接口设计好,就可以先写单元测试的代码.之后再进行实际代码的开发,开发完成之后,再跑一遍之前写的单元测试,如果失败则调试,直到最终成功,会让开发人员特有成就感. 单元测试也特别适合于敏捷

z ar 二维码-ios开发中zBar怎样直接对手机页面进行扫描识别二维码?

问题描述 ios开发中zBar怎样直接对手机页面进行扫描识别二维码? ios开发中怎样用zBar直接对手机页面进行扫描识别二维码而不通过调用摄像头获取图片扫描的方式? 解决方案 不可能做到,因为调用系统相机必须通过用户的许可获得权限.其实iOS 7.0以后的扫码完全可以胜任你需求的~

iOS 开发中的 Flux 架构模式

本文讲的是iOS 开发中的 Flux 架构模式, 在半年前,我开始在 PlanGrid iOS 应用程序中采用 Flux 架构(开发).这篇文章将会讨论我们从传统的 MVC 转换到Flux的动机,同时分享我们目前积累到的经验. 我尝试通过讨论代码来描述我们大部分的 Flux 实现, 它用于我们今天的产品中. 如果你只对综合结果感兴趣, 请跳过这篇文章的中间部分. 为什么从 MVC 转移 为了引入我们的决定, 我想要先谈一谈 PlanGrid 这个应用遇到的一些挑战.一些问题仅针对企业级应用程序,

ios开发中两个常见问题解决方法

  ios开发中两个常见问题解决方法来啦!大家知道苹果手机使用的是ios系统,而且用户量很庞大,所以ios开发也成了很热门的行业.下文小乐哥给大家带来ios开发中两个常见问题解决方法,希望给技术员在ios开发中起到帮助作用! ios开发中两个常见问题解决方法 一."Unknown class XXViewController in Interface Builder file."问题处理 最近在静态库中写了一个XXViewController类,然后在主工程的xib中,将xib的类指定

ios开发中怎么删除NavigationController?大神救我

问题描述 ios开发中怎么删除NavigationController?大神救我 ios开发中怎么删除NavigationController?大神救我!!!为啥我添加过之后,不知道该怎么删除了,好尴尬 解决方案 NavigationController 是没有没视图的 它只是一个容器 它只有在包装了一个视图控制器,或者是由[ self.navigationController Push]才会显示导航栏 如果不想要它显示 可以在创建根视图的时候不用NavigationController 包装

iOS开发中标签控制器的使用——UITabBarController

iOS开发中标签控制器的使用--UITabBarController 一.引言         与导航控制器相类似,标签控制器也是用于管理视图控制器的一个UI控件,在其内部封装了一个标签栏,与导航不同的是,导航的管理方式是纵向的,采用push与pop切换控制器,标签的管理是横向的,通过标签的切换来改变控制器,一般我们习惯将tabBar作为应用程序的根视图控制器,在其中添加导航,导航中在对ViewController进行管理. 二.创建一个标签控制器         通过如下的步骤,我们可以很简便

iOS开发中的手势体系——UIGestureRecognizer分析及其子类的使用

iOS开发中的手势体系--UIGestureRecognizer分析及其子类的使用 一.引言         在iOS系统中,手势是进行用户交互的重要方式,通过UIGestureRecognizer类,我们可以轻松的创建出各种手势应用于app中.关于UIGestureRecognizer类,是对iOS中的事件传递机制面向应用的封装,将手势消息的传递抽象为了对象.有关消息传递的一些讨论,在前面的博客中有提到: iOS事件响应控制:http://my.oschina.net/u/2340880/bl