单元测试 (XCTest) NIB Outlets 为零
Posted
技术标签:
【中文标题】单元测试 (XCTest) NIB Outlets 为零【英文标题】:Unit test (XCTest) NIB Outlets are nil 【发布时间】:2015-11-08 05:30:20 【问题描述】:我想通过 XCTest 测试网点设置是否正确。我想分享我目前的方法:以编程方式分配 VC 并检查 outlet 是否不为零。我认为应该直截了当,但测试失败了。
MyViewController *mvc = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:[NSBundle mainBundle]];
[mvc awakeFromNib];
XCTAssert([mvc tableViewOutlet], @"Table view should be hooked up");
我想知道我是否遗漏了一些明显的东西?
【问题讨论】:
测试的主包可能与应用程序的主包不同,因此找不到NIB。 好的,但是怎么可以通过initWithNibName进行分配呢? mvc 是 != nil 只是为了澄清。解决方案是什么?我应该在目标的 Copy Bundle Resources 中添加 .xib 吗? 您可以将 nil 传递给 nib 名称和捆绑包,但仍然可以取回视图控制器,该 init 方法永远不会失败。 【参考方案1】:根据这个问题 XIB outlets unit testing
我发现 NIB 是延迟加载的。您必须调用 [mvc loadView] 才能连接所有插座。
【讨论】:
NIB 是延迟加载的,但加载它们的适当方法是访问view
属性,而不是直接调用loadView
,因为该问题的答案表明您是否仔细阅读。
在这种情况下,人们会执行 [mvc.view subViews] 并找到 tableView 或正在测试的那个,对吧?如果您想测试 nib 中不是视图的其他对象,即数组控制器,该怎么办?
一旦您使用[mvc view];
强制加载,您就可以照常访问您的IBOutlet
s。我只是建议您使用[mvc view];
而不是[mvc loadView];
,因为它会调用视图加载机制,因为它通常会被调用(通常您不会直接调用 loadView)。以上是关于单元测试 (XCTest) NIB Outlets 为零的主要内容,如果未能解决你的问题,请参考以下文章