Самый простой подход - структурировать ваш код так, чтобы он фактически не инициировал вызов API входа в систему.Вместо этого он:
- Создает запрос, но останавливается перед его отправкой
- Обрабатывает ответ
Затем вы можете проверить это заполнение полей инажатие на кнопку создает правильный запрос.После этого вы можете протестировать различные ответы, в том числе всевозможные случаи ошибок, которые трудно создать при сквозном тестировании.
Чтобы нажать кнопку из модульного теста, сделайте так, чтобы тест могполучить доступ к кнопке.Затем позвоните sendActions(for: .touchUpInside)
Подробнее читайте в ближайшее время… Модульное тестирование iOS на примере: советы и методики XCTest с использованием Swift
Пример: Есть много способовструктурировать это.Допустим, у нас есть протокол
protocol NetworkCalling {
typealias CallResult = Result<(Data, URLResponse), Error>
typealias CompletionHandler = (CallResult) -> Void
func call(request: URLRequest, completionHandler: @escaping CompletionHandler)
}
Наш контроллер представления будет использовать все, что ему дают.Это не волнует.Он просто знает, как сделать URLRequest из своих свойств.Он также знает, как обрабатывать результат, как для успеха, так и для отказа.
class ViewController: UIViewController {
var networkCall: NetworkCalling?
@IBAction private func login(sender: AnyObject) {
let request = URLRequest(url: URL(string: "http://foo.bar?baz")!)
networkCall?.call(request: request) { [weak self] result in
self?.handleResult(result)
}
}
private func handleResult(_ result: NetworkCalling.CallResult) {
switch result {
case let .success(data, response):
break
case let .failure(error):
break
}
}
}
Протокол вводит границу.Контроллер вида не может видеть за этой границей.Это не бизнес контроллера представления.Протокол дает нам возможность предоставлять различные реализации:
- Что-то, что делает реальные сетевые вызовы.
- Декоратор, который оборачивает другого реализатора, выполняя ведение журнала.
- A TestШпион, который фиксирует свои аргументы для модульного тестирования.
- Подделка, которая воспроизводит сохраненные ответы для тестирования пользовательского интерфейса.Это делает тестирование пользовательского интерфейса быстрее и надежнее.