如何模拟 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 异步发布者的一些奇怪问题,请参阅此帖子以获取更多讨论:
关于ios - 如何模拟 URLSession.DataTaskPublisher,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59521928/