Создаем идеальный сетевой слой в Swift
Пора распутать URLSession вызовы в вашем коде и навсегда избавиться от этой проблемы.
Вместо URLSession.shared везде — создаем NetworkClient протокол:
protocol NetworkClient {
func send<T: Decodable>(_ request: URLRequest) async throws -> T
}
URLProtocolStub позволяет перехватывать все запросы и возвращать mock-данные. Никаких реальных API в тестах!
Dependency Injection:
class UserService {
private let networkClient: NetworkClient
init(networkClient: NetworkClient) {
self.networkClient = networkClient
}
}
Что получаем:
• Один NetworkError enum вместо хаоса
• Легко подменяемые зависимости
• Async/await вместо completion handlers
• Код, который не стыдно показать коллегам
>>Click here to continue<<
