在 Swift 中存根 HTTP 请求
Stubbing HTTP Requests in Swift
我正在为 iOS 应用程序使用 Swift,并使用 Alamofire 执行 HTTP 请求。
我想编写单元测试来覆盖我的功能,但我在存根 Alamofire 执行的 HTTP 请求时遇到了问题。我正在使用 Nocilla(导入到桥接头中)来尝试存根我的 HTTP 请求,但似乎在测试中从未达到对我的 HTTP 请求的回调。
我想知道是否有人有过在他们的测试套件中成功存根 Alamofire 的 HTTP 请求的经验?
谢谢!
我没有,但这是我用于单元测试 HTTP 请求的一般模式(专门调用 REST APIs)。我已经成功地将其用于 Alamofire 和 AFNetworking。
- 我通常有一个 class "wraps"(我们称它为
Service
)底层网络 APIs(Alamofire、AFNetworking,或者只是纯 iOS APIs)。 Service
通常是无状态的,负责为我的应用程序进行调用 "nicer"。
- 对我来说,
Service
通常与我尝试使用的 REST API 密切相关。例如,如果我使用的 REST API 允许我 POST 到 Person
集合,我将有一个 API 像 Service.PostPerson
,Service.GetPerson
,等等
- 我的应用程序 classes(通常是控制器)使用
Service
并且通常使用 inversion of control
来创建 Service
。
- 在我的单元测试中,我提供了一个
UnitTestService
以便我的 classes 最终使用 UnitTestService
的实例而不是 Service
的实例。
- 为简单起见,我的
UnitTestService
通常 returns 根据配置硬编码 JSON 响应。因此,在上面的示例中,我将对 Service.PostPerson
. 进行硬编码 JSON 响应
我使用了多种技术来做到这一点:
- 有一个
ServiceProtocol
Service
和 UnitTestService
都实现的协议
- 有一个用一组闭包实例化的
Service
。这些闭包执行实际工作,您可以根据您是连接到 Internet 还是模拟它来提供不同的闭包。
因为我有一定的函数式编程背景,所以我喜欢后者。但这两种技术都有效。
我正在为 iOS 应用程序使用 Swift,并使用 Alamofire 执行 HTTP 请求。
我想编写单元测试来覆盖我的功能,但我在存根 Alamofire 执行的 HTTP 请求时遇到了问题。我正在使用 Nocilla(导入到桥接头中)来尝试存根我的 HTTP 请求,但似乎在测试中从未达到对我的 HTTP 请求的回调。
我想知道是否有人有过在他们的测试套件中成功存根 Alamofire 的 HTTP 请求的经验?
谢谢!
我没有,但这是我用于单元测试 HTTP 请求的一般模式(专门调用 REST APIs)。我已经成功地将其用于 Alamofire 和 AFNetworking。
- 我通常有一个 class "wraps"(我们称它为
Service
)底层网络 APIs(Alamofire、AFNetworking,或者只是纯 iOS APIs)。Service
通常是无状态的,负责为我的应用程序进行调用 "nicer"。 - 对我来说,
Service
通常与我尝试使用的 REST API 密切相关。例如,如果我使用的 REST API 允许我 POST 到Person
集合,我将有一个 API 像Service.PostPerson
,Service.GetPerson
,等等 - 我的应用程序 classes(通常是控制器)使用
Service
并且通常使用inversion of control
来创建Service
。 - 在我的单元测试中,我提供了一个
UnitTestService
以便我的 classes 最终使用UnitTestService
的实例而不是Service
的实例。 - 为简单起见,我的
UnitTestService
通常 returns 根据配置硬编码 JSON 响应。因此,在上面的示例中,我将对Service.PostPerson
. 进行硬编码 JSON 响应
我使用了多种技术来做到这一点:
- 有一个
ServiceProtocol
Service
和UnitTestService
都实现的协议 - 有一个用一组闭包实例化的
Service
。这些闭包执行实际工作,您可以根据您是连接到 Internet 还是模拟它来提供不同的闭包。
因为我有一定的函数式编程背景,所以我喜欢后者。但这两种技术都有效。