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中描述“加载视图”