【问题标题】:Stubbing HTTP Requests in Swift [closed]在 Swift 中存根 HTTP 请求 [关闭]
【发布时间】:2015-02-26 17:16:10
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

  • 绝对有可能,如果您可以发布一些您正在设置的代码,帮助您解决问题会容易得多。

标签: ios unit-testing swift alamofire nocilla


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 谢谢。我已经有一段时间没有回过头来了,但是您的回复与我正在寻找的内容相符
猜你喜欢
  • 1970-01-01
  • 2021-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-24
  • 2015-02-05
  • 1970-01-01
相关资源
最近更新 更多