Swift中的模拟网络层—第3部分

通过模拟URLProtocol

请检查有关网络层第1部分和第2部分的先前文章。

什么是模拟?

在面向对象的编程中,模拟对象是模拟对象,它们以受控方式模拟实际对象的行为。 维基

在我们的例子中,我们必须模仿URLSession,以便它可以返回模拟对象而不会触及物理服务器。 我们可以通过创建对URLProtocol进行确认的MockURLProtocol并实现其所需的方法来实现此目的 。 现在,我们的MockURLProtocol能够处理指定的请求。

现在,我们必须将MockURLProtocol添加到 URLSessionConfiguration.protocolClasses数组以处理会话中的请求。

模拟行动:

例如,要模拟loginUser函数,我们必须准备一个假的响应对象 ,该对象在真实的服务器调用中是我们期望的。 该响应对象将作为MockURLProtocol的 requestHandler的响应返回

最终的模拟登录用户函数如下所示。

请检查示例代码中的APIMockingTests.swift文件。