Я хочу проверить мой код сетевого запроса. Тестирование не является моей сильной стороной, и я делаю это главным образом для того, чтобы лучше создавать тестируемый код. Я обычно использую Alamofire, но хочу обойти это для юнит-тестов. Я создал такой протокол:
protocol NetworkSession {
func request(
_ endpoint: Endpoint,
method: HTTPMethod,
completion: @escaping (Result<<DataResponse<Any>>, RequestError>) -> ()
)
}
Я соответствую этому протоколу в моем классе NetworkSessionManager
:
final class NetworkSessionManager : NetworkSession {
func request(
_ endpoint: Endpoint,
method: HTTPMethod,
completion: @escaping (Result<<DataResponse<Any>>, RequestError>) -> ()) {
guard let url = endpoint.url else {
return completion(.failure(.couldNotEncode))
}
Alamofire.request(url, method: method, headers: headers)
.validate()
.responseJSON { response in
completion(.success(response))
}
}
}
}
Затем в моем BackendClient
классе я делаю инъекцию и называю мой NetworkSessionManager
следующим образом:
private let session: NetworkSession
init(session: NetworkSession = NetworkSessionManager()) {
self.session = session
}
func someFunction(...) {
session.request(...)
}
Теперь я знаю, что мне нужно создать фиктивный класс, соответствующий NetworkSession
, но я не уверен, что мне в нем делать? Как проверить все возможности и возвращенные данные? На моем сервере есть разные конечные точки, которые возвращают разные типы данных. Если бы кто-то мог указать мне на следующие шаги, которые я должен предпринять, я был бы очень благодарен.
final class NetworkSessionManagerMock : NetworkSession {
func request(
_ endpoint: Endpoint,
method: HTTPMethod,
completion: @escaping (Result<<DataResponse<Any>>, RequestError>) -> ()) {
???
}
}