我正在使用Swift作为iOS应用程序,并使用Alamofire执行HTTP请求。
我想编写单元测试来覆盖我的功能,但是我无法将Alamofire执行的HTTP请求存根。我正在使用Nocilla(导入到桥接头)来尝试存根我的HTTP请求但似乎在测试中永远不会到达我的HTTP请求的回调。
我想知道是否有人在测试套件中成功存储了Alamofire的HTTP请求?
谢谢!
答案 0 :(得分:6)
我没有,但这是我用于单元测试HTTP请求(特别是调用REST API)的一般模式。我已经成功地将它用于Alamofire和AFNetworking。
Service
)基础网络API(Alamofire,AFNetworking或纯iOS API)的类。 Service
通常是无状态的,负责为我的应用程序调用“更好”。Service
通常与我尝试使用的REST API密切相关。例如,如果我使用允许我发送到Person
集合的REST API,我会使用Service.PostPerson
,Service.GetPerson
等API。Service
并且通常使用inversion of control
来创建Service
。UnitTestService
,以便我的课程最终使用UnitTestService
的实例而不是Service
的实例。UnitTestService
通常会根据配置返回硬编码的JSON响应。因此,在上面的示例中,我将对Service.PostPerson
进行硬编码的JSON响应。我使用了很多技巧来做到这一点:
ServiceProtocol
和Service
实施UnitTestService
Service
。这些闭包可以完成实际工作,您可以提供不同的闭包,具体取决于您是连接到Internet还是模拟它。因为我有一些函数式编程背景,所以我喜欢后者。但这两种技术都有效。