У меня есть код Swift 2 с использованием Alamofire, который запрашивает удаленный URL-адрес, который он ожидает вернуть JSON. Я сделал достаточно интерактивного тестирования, чтобы быть достаточно уверенным, что он ведет себя достаточно правильно. Теперь я хочу выполнить его тестирование, чтобы я мог полагаться на этот код, а затем переходить на другие вещи.Как мне высмеять ответ Alamofire?
Я новичок в Swift, хотя я программировал OO Perl в течение десятилетий, поэтому, возможно, кое-что, что я пропустил.
Вот как я установил контрольный код до сих пор (несущественные вещи, такие как, как я получаю имя пользователя и пароль, удаленные, чтобы избежать як-бритья). Вызывающий код указывает имя пользователя и пароль и ожидает, что один из двух обратных вызовов будет вызываться всякий раз, когда будет получен результат. (Я не получил, насколько дело с ошибками, так что пожалуйста, не отвлекаться на эту тему.)
struct checkUsernameHandler {
var onSuccess:() ->()
var onFailure:() ->()
}
struct checkUsernameOutput {
var authenticated: Bool?
}
func checkUsername(user: User, handler: checkUsernameHandler) {
Alamofire.request(.PUT, NSURL(string: baseURL + "/user/verify?key=" + apiKey)!,
parameters: [
"username": user.username!,
"password": user.password!,
],
encoding: .JSON
).responseJSON { response in
let checkusernameOutput = self.analyseCheckUsernameResponse(response)
if let authenticated = checkusernameOutput.authenticated {
if authenticated {
handler.onSuccess()
} else {
handler.onFailure()
}
}
}
}
func analyseCheckUsernameResponse (response: Response<AnyObject, NSError>) -> checkUsernameOutput {
var output = checkUsernameOutput()
if (response.result.isSuccess) {
if let JSON = response.result.value as? NSDictionary {
// ...
}
} else {
print("Didn't get proper JSON or something: \(response.result.error)")
}
return output
}
Что я ищу способ взять сырой JSON и передать его в Alamofire, так что я могу создать объект ответа, который имеет в нем соответствующие вещи, включая ошибки, если он ничего не получил (тайм-аут?) или возвращенные данные были недопустимыми (например, HTML-формат 404 или 500 страниц).
Я счастлив на данный момент с функцией checkUsername, поэтому мне неинтересно, что кто-то говорит «используйте OHHTTPStubs». Я смотрю на тестирование только кода, о котором я сомневаюсь, это код, который я только что написал.
EDIT: После faffed о некоторых более, это выглядит как внутреннее Alamofire в достаточной степени связаны, что создать поддельный ответ, мне нужно сделать в значительной степени всех работ, участвующих в настройке подключения к сети в любом случае. Поэтому, возможно, ответ: «Это слишком много хлопот, чтобы сделать это»?
Have Вы искали «притворной Alamofire», там, кажется, несколько полезных предложений, таких как https://github.com/Alamofire/Alamofire/blob/master/Tests/URLProtocolTests.swift#L27-L81 и http://stackoverflow.com/questions/26918593/unit-testing-http-traffic -in-alamofire-app – Michael
Да, поэтому я сказал, что мне не интересно насмехаться над всем стеком, и это то, что в основном предлагалось этими сообщениями. –
Вы находите способ высмеять ответ? –