iOS:使用Alamofire + Kakapo在Swift中模拟服务器行为和响应

在Tiendeo Mobile部门,我们一直在寻找新的方法来使我们的应用程序更具可测试性和更好的测试。

让我介绍有关数据层的基本概念。 如果您熟悉Alamofire和AlamofireObjectMapper,则我们的应用程序数据层将使用一个名为AuthenticationSessionManager的自定义Alamofire SessionManager类,该类可实现RequestAdapter和RequestRetrier协议。

我们的AuthenticationSessionManager有自己的请求方法,可以在调用Alamofire请求方法之前检查用户令牌是否有效:

首先,我们创建一个称为AuthenticationSessionManagerTest的单元测试测试类,并实现一个方法,该方法返回无效令牌,并使用Kakapo的Router类实现另外两个方法来设置拦截器,用于两个成功的API调用:

然后,我们需要配置我们的自定义SessionManager以使用Kakapo协议。 我们将创建一个方法来创建自定义URLSessionConfiguration

并且…我们已经完成了测试的// Given部分:

总结一下:我们已经有一个配置有Kakapo和无效令牌的sessionManager 。 我们还有两个API调用可供拦截。 💪

现在我们必须实现测试的// When// Then部分。

我们将使用sessionManager“ _api / Fake”发出请求,该请求将被拦截。 正如我们在文章开头所看到的sessionManagersessionManager将首先检查令牌,但是令牌将无效…… sessionManager自动向“ _api / TokenNew”请求新的令牌,该令牌也将被拦截。 当获得新令牌时,最终它将调用“ _api / Fake” ,其响应将成功。 🎊

让我们看一下代码:

这是测试的样子! 我们使用expectation来检查响应的值是否与我们为Kakapo路由器设置的值相同。

从这里开始

以此测试为样本,我们可以创建多个测试方案来测试我们的SessionManager,如下所示:

  • 有效令牌
  • 伪API调用成功

要么:

  • 没有令牌
  • 刷新令牌API调用成功
  • 伪API调用成功

要么:

  • 有效令牌
  • 伪API调用响应401

等等
只是改变
//给出条件并向Kakapo的路由器添加新的响应。

希望您发现这篇文章有趣并且对您的项目有用。 任何问题或评论都将受到欢迎!

谢谢,祝你好运!