미리 조언 해 주셔서 감사합니다!단위 신속한 키 체인 인증이 필요한 개인 기능 테스트
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 (를 통해 그 간접적으로 수행 할 수 있습니다 여기에 내가 함께 일하고 있어요 코드입니다 은밀한.
가 나는
(200) 또는 (401) 내가 반드시 완전한 코드를 찾는 게 아니에요 돌아 오는 경우에 statusCode이 서버에서 제대로 아래로 가져 와서 적절한 단계가 수행되고 있는지 테스트 할 수 있도록하려면 , 그러나 단순히 문제에 접근하는 방법. 도움이 될만한 자료를 알고 있다면 감사 할 것입니다. 나는 이것에 아주 새롭고 나는 온라인으로 자원을 조사하는 것을 시도하고 그러나 아무것도를 찾아 낼 수 없었다. 내가 발견 한 많은 것들은 개인적인 기능을 직접 테스트하고 싶지는 않지만 테스트를 위해 기능을 공개로 변경하는 것을 권장하지 않습니다.
다시 한번 살펴보고 있습니다. 숀 W.
기본적으로 테스트 클래스에 개인 메소드를 복사하여 붙여 넣으시겠습니까? 필자가 작업하고있는 2 개의 메소드가 필요합니다. 필자는 기본적으로 전체 viewcontroller를 테스트 클래스에 복사하고 있습니까? 조언 해 주셔서 감사합니다. –