Swift - Как отключить сеть при модульном тестировании - PullRequest
0 голосов
/ 14 сентября 2018

Есть ли способ закрыть интернет-соединение для модульного тестирования? Я должен проверить асинхронную функцию, когда устройство в сети или нет. Как я могу это сделать?

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

Заранее спасибо

1 Ответ

0 голосов
/ 14 сентября 2018

Вот как я высмеиваю вызов API. Шаги требуют

1) Нет подключения к интернету

2) Насмешка над вызовом API и данными

Я создал модели данных для ответа API, и вот как я это высмеиваю

func buildActivityList() -> ActivityResponse {
    let resp = ActivityResponse(json: .null)
    let userHistory = ActivityUserHistory(json: .null)
    userHistory.time = "2018-02-16T07:41:54.046Z"
    resp.userHistory = [userHistory]
    //Add all other relevant data
    return resp
}

Затем вам нужно переопределить функцию, если вы вызываете API, и передать вышеуказанные макетированные данные как ответ API.

Предположим, у вас есть класс, где вы называете API

class UserService {
    func getUserDetails(completion: (_: ActivityResponse?, _: Error?)) {
        //get RESPONSE from server
        let data = ActivityResponse(object: RESPONSE)
        return completion(data, nil)
    }
}

Теперь в вашем тестовом классе вызовите buildActivityList(), который мы создали, и передайте его в фиктивный класс.

class MockUserService: UserService {
    override func getUserDetails(completion: (_: ActivityResponse?, _: Error?)) {
        return completion(buildActivityList(), nil)
    }
}

Таким образом, всякий раз, когда вы тестируете вызов API, вводятся фиктивные данные. Таким образом, нет необходимости подключения к интернету.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...