2

我将 Swift 用于 iOS 应用程序,并使用 Alamofire 执行 HTTP 请求。

我想编写单元测试来涵盖我的功能,但是我在对 Alamofire 执行的 HTTP 请求进行存根处理时遇到了麻烦。我正在使用 Nocilla(导入到桥接头中)来尝试对我的 HTTP 请求进行存根,但似乎在测试中从未达到对我的 HTTP 请求的回调。

我想知道是否有人有在他们的测试套件中成功地为 Alamofire 的 HTTP 请求存根的经验?

谢谢!

4

1 回答 1

7

我没有,但这是我用于单元测试 HTTP 请求(专门调用 REST API)的一般模式。我已经成功地将它用于 Alamofire 和 AFNetworking。

  1. 我通常有一个“包装”(我们称之为Service)底层网络 API(Alamofire、AFNetworking 或纯 iOS API)的类。Service通常是无状态的,负责使我的应用程序的调用“更好”。
  2. 对我来说,Service它通常与我尝试使用的 REST API 密切相关。例如,如果我使用允许我发布到Person集合的 REST API,我将有一个类似Service.PostPerson,Service.GetPerson等的 API。
  3. 我的应用程序类(通常是控制器)使用Service并且通常用于inversion of control创建Service.
  4. 在我的单元测试中,我提供了一个UnitTestService,以便我的类最终使用一个实例UnitTestService而不是一个实例Service
  5. 为简单起见,我UnitTestService通常会根据配置返回硬编码的 JSON 响应。所以在上面的例子中,我会有一个硬编码的 JSON 响应Service.PostPerson

我使用了多种技术来做到这一点:

  • 有一个ServiceProtocol既能实现Service又能UnitTestService实现的协议
  • 有一个Service用一组闭包实例化的单个。这些闭包做真正的工作,你可以根据你是连接到互联网还是模拟它来提供不同的闭包。

因为我有一些函数式编程背景,所以我喜欢后者。但两种技术都有效。

于 2015-02-26T17:46:09.067 回答