iPhonetesting:testingIBOutlets
我实际上感到有些尴尬,因为它感觉像你一样基本,但它已经把我困住了好几个小时。
比方说,我有一个UIViewController(称为MyViewController)的实例,它只是一个IBOutlet到一个UITextField,并且当页面加载时,我将它设置为Enabled或不基于BOOL属性。
- (void)viewDidLoad { [super viewDidLoad]; self.surname.enabled = self.allowTextField; }
一切都正确连接,当我运行应用程序,它按预期工作(主 – 我希望如果我不能得到那部分权利,我可能不应该写iPhone应用程序…)。
无论如何,我决定努力工作,为应用程序编写应用程序unit testing,因为这是我想成为一个更坚实的东西。不幸的是,我不能理解为什么以下不起作用…
-(void)testFieldEnabled { MyViewController *myController = [[MyViewController alloc] initWithNibName:nil bundle:nil]; myController.allowTextField = YES; [myController viewDidLoad]; STAssertTrue(myController.surname.enabled, @"Why is this not correct?"); }
我一直保持这个例子非常简单,因为我真的不明白为什么这不起作用,并相信这一定是由于我对unit testing的理解失败。 上面的unit testing不应该启动一个MyViewController页面的实例,设置属性,运行该方法并返回true? 目前它一直告诉我姓氏textfield没有启用。
感谢您的帮助和新年快乐!
这是因为手动调用viewDidLoad并不实际加载视图。 你应该调用视图控制器的视图属性,这将自动加载视图(或手动调用loadView)。
尝试以下操作:
-(void)testFieldEnabled { MyViewController *myController = [[MyViewController alloc] initWithNibName:nil bundle:nil]; [myController view]; myController.allowTextField = YES; STAssertTrue(myController.surname.enabled, @"Why is this not correct?"); }
viewDidLoad
只会调用具有初始化代码的委托方法。 它不会做任何实际的视图加载。 此外,您需要在加载视图之后设置allowTextField
,否则将使用默认值覆盖它。
您可以使用“加载视图”而不是视图加载。 您还必须在My View Controller中描述“加载视图”