ios - 如何模拟 URLSession.DataTaskPublisher

标签 ios swift mocking urlsession combine

如何模拟 URLSession.DataTaskPublisher?我有一个类 Proxy 需要注入(inject)一个 URLSessionProtocol

protocol URLSessionProtocol {
    func loadData(from url: URL) -> URLSession.DataTaskPublisher
}
class Proxy {

    private let urlSession: URLSessionProtocol

    init(urlSession: URLSessionProtocol) {
        self.urlSession = urlSession
    }

    func get(url: URL) -> AnyPublisher<Data, ProxyError> {
        // Using urlSession.loadData(from: url)
    }

}

此代码最初用于带有完成处理程序的 URLSession 的传统版本。这是完美的,因为我可以很容易地模拟 URLSession 来像 Sundell 的解决方案一样进行测试:Mocking in Swift .

是否可以使用 Combine Framework 做同样的事情?

最佳答案

就像您可以注入(inject) URLSessionProtocol 来模拟具体 session 一样,您也可以注入(inject)模拟的 Publisher。例如:

let mockPublisher = Just(MockData()).eraseToAnyPublisher()

但是,根据您对该发布者所做的操作,您可能必须解决 Combine 异步发布者的一些奇怪问题,请参阅此帖子以获取更多讨论:

Why does Combine's receive(on:) operator swallow errors?

关于ios - 如何模拟 URLSession.DataTaskPublisher,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59521928/

相关文章:

ios - 检查是否已在 Apple Watch 上授予 HealthKit 权限的最佳方法?

ios - iOS上的RestKit-嵌套对象的后续API调用?

Swift:如何创建具有 Int 值的谓词?

swift - 如何获取 URL "title"标记值?

python - 为在子进程中运行的 python 功能测试运行假的 redis

javascript - 如何使用 testcafe 拦截和模拟 websocket 请求

ios - 作为构造函数关闭?

ios - 使用 UIActivityViewController 共享图像

Swift Firebase 访问子快照中的数据(通过 childAdded)

javascript - 如何注入(inject) app.run 函数中使用的模拟 Angular 服务?