Пересмешивая внутренние функции метода, я хотел бы провести юнит-тест - PullRequest
0 голосов
/ 26 декабря 2018

Я хотел бы провести модульное тестирование приведенного ниже кода.

По сути, я бы сказал, что

dispatchRequest называется

dispatchRequest вызывается с правильнымparams

dispatchRequest обработчик завершения возвращается, как и ожидалось

dispatchRequest обрабатывает ошибки, как и ожидалось

Я изо всех сил пытаюсь понять, как я могу высмеивать внутреннюю работу call функция, так что я могу обойти это.

Должен ли я создать MockNetworkClient, который также соответствует APIClient?

struct NetworkClient: APIClient {
    func call(with endpoint: IdentityEndpoint, completion: @escaping (Result<IdentityResponse>) -> Void) {
        dispatchRequest(route: endpoint, completion: completion)
    }
}

NetworkClient соответствует APIClient, который выглядит следующим образом

protocol APIClient {
    var session: URLSession { get }
    func call<T: Codable>(route: EndPointType, completion: @escaping (Result<T>) -> Void) -> Void
    func cancel() -> Void
}

extension APIClient {
    var session: URLSession {
        return URLSession.shared
    }

    func call<T: Codable>(route: EndPointType, completion: @escaping (Result<T>) -> Void) -> Void {
        do {
            let request = try constructRequest(from: route)
            execute(with: request, completion: completion)
        } catch {
            print("something went wrong....")
        }
    }}
...