DVR 是一个简单的 Swift 框架,用于为 iOS、watchOS 和 OS X 创建伪造的 NSURLSession
请求,它基于 VCR。
简单的依赖注入是主要的设计目标。API 与 NSURLSession
相同。DVR.Session
是 NSURLSession
的子类,因此你可以将其用作任何地方的直接替换。(目前仅支持数据任务。)
let session = Session(cassetteName: "example")
let task = session.dataTask(with: request) { data, response, error in
// Do something with the response
}
// Nothing happens until you call `resume` as you'd expect.
task.resume()
这将回放 example
磁带(cassette)。完成处理程序的工作方式与通常情况下完全相同。在本例中,DVR 将在你的测试 bundle 中查找名为 example.json
的磁带。
如果请求的录制文件丢失,它将录制并保存到磁盘。保存到磁盘后,它将断言并显示录制文件的路径。这会导致测试停止,以便你可以将磁带添加到你的测试目标并重新运行测试。
默认情况下,一个 DVR 会话仅录制一个请求。如果你告诉 DVR 何时开始和停止录制,则可以在同一磁带中录制多个请求。
let session = Session(cassetteName: "multiple")
// Begin recording multiple requests
session.beginRecording()
session.dataTask(with: URLRequest(url: URL(string: "http://apple.com")!)) { data, response, error in
// Do something with the response
session.dataTask(with: URLRequest(url: URL(string: "http://google.com")!)) { data, response, error in
// Do something with the response
}.resume()
// Finish recording multiple requests
session.endRecording() {
// All requests have completed
}
}.resume()
如果你不调用 beginRecording
和 endRecording
,DVR 将在你向会话发出的第一个请求前后为你调用这些方法。你可以在提交所有请求到会话后立即调用 endRecording
。endRecording
接受的可选完成代码块将在所有请求完成后被调用。这是一个实现你已设置的 XCTest expectation 或在网络操作完成后执行其他操作的好地方。