FireMock
FireMock 帮助模拟 HTTP 请求。如果您正在寻找测试请求或与尚未就绪的服务器一起工作的简单方法,那么您就在一个很好的位置。以很短的努力测试您的应用程序,并使用假响应数据和文件。只需一段简短的代码,您就可以设置多个模拟并在运行时切换它们,FireMock 通过自定义视图提供。
入门指南
要模拟您的请求,您需要添加包含您结构化响应数据(Json、XML 等)的文件,并通过 Cocoapods 安装 FireMock。
安装
CocoaPods
要使用 CocoaPods 将 FireMock 集成到 Xcode 项目中,请在 Podfile 中指定它
pod 'FireMock'
用法
导入 FireMock
@import FireMock
仅限 Swift4
对于 Swift4,您需要在 AppDelegate 中添加初始化代码。
class AppDelegate: UIResponder, UIApplicationDelegate {
override init() {
super.init()
URLSessionConfiguration.classInit
}
//...
}
启用 FireMock
将以下代码添加到您的应用程序中以启用 FireMock。
FireMock.enabled(true)
实现 FireMockProtocol
对于每个请求,您可以将一个回显与将用作返回所需响应的 mock 关联。创建一个 mock 非常简单。实现 FireMockProtocol 协议并定义其特征。除了 mockFile 函数外,所有内容都是可选的,该函数在请求开始时期望使用文件。
例如,如果您有一个用于获取新闻并具有多个可能响应的服务
enum NewsMock: FireMockProtocol {
case success
case successEmpty
case failedParameters
public var bundle: Bundle { return Bundle.main }
public var afterTime: TimeInterval { return 0.0 }
public var parameters: [String]? { return nil }
public var headers: [String : String]? { return nil }
public var statusCode: Int { return 200 }
public var httpVersion: String? { return "1.1" }
public var name: String? { return "Fetch News" }
public func mockFile() -> String {
switch self {
case .success:
return "success.json"
case .successEmpty:
return "successEmpty.json"
case .failedParameters:
return "failedParameters.json"
}
}
}
请参阅 FireMockProtocol 以获取有关属性的更多信息。
注册
最后一步,为特定请求注册一个或多个模拟。指定与之关联的URL以及是否启用。您可以在编译时禁用并在运行时启用。您还可以在运行时更改模拟。这将在下面进行描述。
FireMock.register(mock: NewsMock.success, NewsMock.successEmpty, httpMethod: .get, forURL: url, enabled: true)
如果您希望对URL更加灵活,可以使用正则表达式进行注册。当您不清楚确切的URL时,这非常有用。
let regex = "https?://foo.com(/\\S*)?"
FireMock.register(mock: NewsMock.success, NewsMock.successEmpty, NewsMock.failedParameters, regex: regex, httpMethod: .get, enabled: true)
主机条件
您可以使用您的模拟文件与特定的主机一起使用。如果为空,模拟将对所有主机工作。
FireMock.onlyHosts = ["foo.com"]
您可以排除主机。
FireMock.excludeHosts = ["foo.com"]
调试
关于已截获的请求的调试信息以及启用或禁用模拟。您可以设置两个不同等级的信息。
FireMock.debug(enabled: true)
在运行时启用和更改模拟
所有模拟都可以在运行时启用或禁用。FireMock提供一个视图控制器,列出了您注册的所有模拟。这样,您就可以轻松地在两种状态之间切换,而无需更改代码。如果您注册了两个或更多的模拟,您也可以在运行时更改模拟。
FireMock.presentMockRegisters(from: self, backTapped: nil)
与第三方系统集成
当FireMock使用URLSession API时,它会自动处理与第三方网络集成的过程。FireMock使用Swizzling方法,向会话配置的protocolClasses数组中添加FireURLProtocol。
许可证
本项目遵循MIT许可证。