问题描述
我正在尝试为我的 URLSession
快速缓存编写单元测试。
有没有办法知道响应是来自服务器还是来自缓存,以便我可以编写单元测试来检查我的响应是否被缓存?
解决方法
您需要继承 URLCache 以创建一个 mock 并配置您的 URLSession 以便它使用您的 MockURLCache。
您的 MockURLCache 覆盖:
override func getCachedResponse(for dataTask: URLSessionDataTask,completionHandler: @escaping (CachedURLResponse?) -> Void) {
super.getCachedResponse(for: dataTask) { cachedURLResponse in
self.retrievedCachedResponse?(cachedURLResponse)
completionHandler(cachedURLResponse)
}
}
其中 self.retrievedCachedResponse(_:)
是闭包类型的可选:
class MockURLCache: URLCache {
var retrievedCachedResponse: ((CachedURLResponse?) -> Void)?
...
}
您可以在单元测试中方便地设置。这个闭包可能会满足你可以断言的 XCTestExpectation。