2015-02-12 43 views
0

我在尝试使用XCTest进行自动单元测试时发生崩溃。编写“testLogin”功能。在使用XCTest进行自动单元测试期间发生应用程序崩溃iOS

func testLogin() { 

    let controller = ViewController() 
    controller.usernameTextField.text = "username" 
    controller.passwordTextField.text = "password" 
    controller.LoginPressed(self) 

    XCTAssert(true, "Pass") 
} 

用户名和密码文本字段是控制器的IBOutlet。但是,当我尝试使用XCTest测试应用程序时,应用程序在usernameTextField处崩溃,说该值为零。 IBOutlet如何成为零..我错过了任何设置吗?

回答

0

当您使用storyboard/xib加载控制器时,系统使用方法initWithCoder设置插座。 当你与ViewController()创建视图控制器,你是不是,而是从一个普通的init方法

//Creating the view controller from the init method 
ViewController() 

//Creating the view controller from a nib 
UIViewController(nibName: "ViewControllerNibName", bundle: nil) 

//Creating the view controller from a storyboard 
let storyboard = UIStoryboard(name: "MainStoryboardName", bundle: nil) 
storyboard = instantiateViewControllerWithIdentifier("ViewControllerIdentifier") 

使用底部的两个方法来创建视图控制器将设置一个创建从一个情节提要/ XIB该控制器插座正确。如果插座设置在xib中,则使用2nd,如果设置在故事板中,则使用3rd。

2

直到viewDidLoad方法被调用时,IBOutlets都是零。为了从单元测试中调用它,你应该在访问插座之前调用视图控制器的视图属性。 这将调用didLoad:

func testLogin() { 

    let controller = ViewController() 
    controller.view 

    controller.usernameTextField.text = "username" 
    controller.passwordTextField.text = "password" 
    controller.LoginPressed(self) 
    XCTAssert(true, "Pass") 
}