【问题标题】:How to test cached response in swift?如何快速测试缓存的响应?
【发布时间】:2021-04-06 05:07:03
【问题描述】:

我正在尝试为我的URLSession 快速缓存编写单元测试。

有没有办法知道响应是来自服务器还是来自缓存,以便我可以编写单元测试来检查我的响应是否被缓存?

【问题讨论】:

  • 不确定为什么你想这样做。我可以想象你想测试你自己的网络库,这可能是有意义的。但是,如果您想测试 API,URLCaching 是一个基础细节,恕我直言,不应在 API 测试中进行测试。此外,响应是否将被缓存还取决于响应和 Cache-Control 响应标头 - 这由后端确定,通常也无法在单元测试(可能与集成测试)中测试,但这更好在后端的测试中完成。

标签: ios swift caching urlsession


【解决方案1】:

你需要继承 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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    相关资源
    最近更新 更多