4

我需要开始为这个 iPhone 项目做一些 TDD。问题在于它大量使用 API 数据。

我正在寻找一个很好的教程/指南/示例项目,它展示了如何在为 iPhone 运行每个测试之前实现 TDD 如何设置数据库。我倾向于使用 UISpec,但如果它做得更好,我愿意研究其他一些测试套件。此外,该项目已经包含了 RestKit,它使用 UISpec 进行自己的测试,因此 UISpec 已经包含在 Xcode 项目中。

4

1 回答 1

12

我是 RestKit 项目的首席开发人员,我建议您不要使用 UISpec 进行测试。RestKit 对 UISpec 的使用(更准确地说,是一个精简的高度定制版本)是开发早期的产物——我使用 UISpec 进行功能测试,并且对携带这么多库犹豫不决。这些天来,UISpec 基本上是废弃软件,我已经开始使用 Square 的 KIF 进行 UI/功能测试。

对于新项目的单元测试,我喜欢 Kiwi ( https://github.com/allending/Kiwi ),因为它位于内置 SenTestingKit 之上并提供 RSpec 样式测试。来自 Pivotal Labs 的Cedar ( https://github.com/pivotal/cedar ) 和 GHUnit ( http://gabriel.github.com/gh-unit/ ) 也很坚固。RestKit 本身可能会在不久的将来某个时候从 UISpec 过渡。

现在,关于如何为您的测试设置数据库的问题。如果你查看 RestKit 中的 RKSpecEnvironment.h/m 文件,有很多有用的单元测试方法。假设您正在使用 RestKit 的核心数据集成,RKSpecNewManagedObjectStore() 方法将拆除核心数据环境并通过删除持久存储为您设置一个清晰的数据库备份。

RestKit 自己的单元测试可以提供一些关于如何针对 API 数据进行单元化的很好的参考(除了上面的测试工具问题)。RKSpecResponseLoader 类可用于将异步 REST 请求转换为您可以测试的程序步骤(它充当 RKObjectLoader 的委托,并将旋转运行循环以等待请求加载)。因此,一般模式是清除数据库状态,设置您需要/期望的任何对象,然后执行 API 交互并针对 Core Data 中的结果或新状态进行断言。

于 2011-08-29T12:22:51.297 回答