上一篇文章简单介绍了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的断言方法。