Tag: Serversideswift

如何通过模拟Vapor 3和Swift中的依赖关系来测试控制器

测试具有外部依赖关系的控制器(尤其是涉及HTTP请求的控制器)非常棘手。 那是因为发送实际的请求会创建一个您不能依靠的测试,并且测试非常缓慢。 但是,您可能熟悉一种非常简单的技术:使用协议并将依赖项注入控制器。 最近,当我尝试从单元测试中的路由获取参数时遇到了一个问题。 因此,今天我想向您展示如何在Vapor 3中轻松传递正确的路线到测试功能。 让我们开始吧🚀 您为什么还要测试控制器? 🤔 想象一下一个在线商店。 在“产品详细信息”页面上,用户可以检查有多少可用商品。 问题是可用性系统是一项外部服务,因此,每当用户想要检查产品状态时,都必须调用外部服务。 由于外部服务可能已关闭或用户正在寻找的物品不再可用,因此控制器必须返回正确的信息。 模拟外部依赖dependencies️ 您无法检查外部服务是否正常运行,但是可以通过模拟外部服务来检查控制器是否正在返回正确的状态代码。 您可能之前已经做过,但很简单: 使用协议进行外部依赖 将其注入控制器内,例如: init方法内 在测试套件内部,使用符合协议的模拟对象 让我们定义一个简单的协议— AvailabilityCheckerProtocol : protocol AvailabilityCheckerProtocol { func checkProduct(id: UUID, quantity: Int) throws -> ProductDetailsResponse var req: Request? { get set } } 我添加了var req: Request? 只是因为它很容易使用client().get()方法并从实现内部的外部服务获取状态,所以使用该协议。 现在创建一个具有checkAvailability功能的控制器: import Vapor import Foundation final class AvailabilityController { […]