Заранее благодарим за любой совет!Модуль Тестирование частных функций, для которых требуется проверка подлинности в цепочке ключей в swift
Я устанавливаю некоторые модульные тесты в быстрой разработке iOS. Метод требует вызова связки ключей для создания authToken для успешного запуска функции. Я не уверен, как подойти к созданию единичного теста для такого рода среды. Я макетирую локальный файл, который можно использовать для обхода аутентификации? Я пытаюсь полностью пропустить шаг аутентификации?
Функция, которую я тестирую, также является частной функцией, и мне сложно понять, как я могу проверить ее с помощью общедоступных методов. Вот код, я работаю с:
override func viewDidLoad() {
super.viewDidLoad()
self.setMyDoctorsNavBarTitle()
self.setBackgroundWaterMark()
self.getDoctors()
//self.refreshControl?.addTarget(self, action: #selector(MyDoctorsViewController.refresh(_:)), forControlEvents: UIControlEvents.ValueChanged)
}
private func getDoctors() {
let authToken: [String: AnyObject] = [ "Authorization": keychain["Authorization"]!, // creates an authToken with the current values stored in
"UUID": keychain["UUID"]!, "LifeTime": keychain["LifeTime"]! ] // the keychain
RestApiManager.sharedInstance.postMyDocs(authToken) { (json, statusCode) in // passes the created authToken to postMyDocs in RestAPI to see if
if statusCode == 200 { // the token matches what's on the server
if let results = json["Doctors"].array { // If the credentials pass, we grab the json file and create an array of Doctors
for entry in results {
self.buildDoctorObject(entry) // Doctors information is parsed into individual objects
}
}
} else if statusCode == 401 {
/* If statucCode is 401, the user's AuthToken has expired. The historical AuthToken data will be removed from the iOS KeyChain and the user will be redirected to the login screen to reauthorize with the API
*/
self.keychain["Authorization"] = nil
self.keychain["UUID"] = nil
self.keychain["LifeTime"] = nil
let loginController = self.storyboard?.instantiateViewControllerWithIdentifier("LoginViewController") as! LoginViewController
NSOperationQueue.mainQueue().addOperationWithBlock {
self.presentViewController(loginController, animated: true, completion: nil)
}
} else if statusCode == 503 {
print("Service Unavailable Please Try Again Later")
}
}
}
private func buildDoctorObject(json: JSON){
let fName = json["FirstName"].stringValue
let lName = json["LastName"].stringValue
let city = json["City"].stringValue
let phNum = json["PhoneNumber"].stringValue
let faxNum = json["FaxNumber"].stringValue
let state = json["State"].stringValue
let addr = json["Address"].stringValue
let img = json["Image"].stringValue
let zip = json["Zip"].stringValue
let tax = json["Taxonomy"].stringValue
let docObj = DoctorObject(fName: fName, lName: lName, addr: addr, city: city, state: state, zip: zip, phNum: phNum, faxNum: faxNum, img: img, tax: tax)
self.docs.append(docObj)
self.tableView.reloadData()
}
Я хочу, чтобы иметь возможность модульного теста на getDoctors() и buildDoctorObject() функции, но я могу сделать только то, что косвенно через viewDidLoad(), так как они частный.
Я хочу, чтобы иметь возможность проверить, что StatusCode приносится вниз правильно с сервера и соответствующие шаги иметь место, если он возвращается как 200 или 401.
Я не обязательно ищет полный код , а просто способ подойти к проблеме. Если вы знаете ресурсы, которые могут быть полезны, я был бы благодарен. Я очень новичок в этом, и я пробовал искать ресурсы в Интернете, но ничего не мог найти. Многое из того, что я нашел, это то, что вы не хотите напрямую проверять частные функции и не рекомендуется изменять функции для общественности ради тестирования.
Еще раз спасибо за внимание!
Sean W.
Итак, по существу, скопируйте и вставьте этот частный метод в класс тестирования? Есть несколько других методов, которые необходимы для 2, над которыми я работаю, по существу ли я копирую весь контроллер представления в тестовый класс? Спасибо за совет! –