2015-11-08 75 views
0

我想测试通过XCTest正确安装插座。我想分享我目前的做法:以编程方式分配VC并检查网点不是零。我认为应该是直截了当的,但测试失败了。单元测试(XCTest)NIB插座为零

MyViewController *mvc = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:[NSBundle mainBundle]]; 

[mvc awakeFromNib]; 
XCTAssert([mvc tableViewOutlet], @"Table view should be hooked up"); 

我在想我是否错过了一些明显的东西?

+0

测试的主包可能与应用程序的主包不同,因此它不会找到NIB。 –

+0

好的,但是如何通过initWithNibName来分配? mvc is!= nil只是为了澄清。什么是解决方案?我应该在目标的Copy Bundle Resources中添加.xib吗? – Rabiees

+0

您可以将nil传递给nib名称和捆绑包,并仍然返回一个视图控制器,init方法永远不会失败。 –

回答

0

根据这个问题 XIB outlets unit testing

我发现,发钞银行都懒加载。您必须调用[mvc loadView]才能连接所有插座。

+0

NIB被惰性加载,但加载它们的适当方式是访问'view'属性,而不是直接调用'loadView',因为这个问题的答案表明是否仔细阅读。 –

+0

在这种情况下,人们会[mvc.view subViews]并找到tableView或正在测试的,对吧?如果你想测试非视图中的其他对象,比如阵列控制器呢? – Rabiees

+0

一旦你用'[mvc view];强制加载',你可以像平常一样访问你的'IBOutlet's。我只是建议你使用'[mvc view];'而不是'[mvc loadView];'因为它调用视图加载机制,因为它通常被调用(通常你不直接调用loadView)。 –