【问题标题】:Unit test (XCTest) NIB Outlets are nil单元测试 (XCTest) NIB Outlets 为零
【发布时间】: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 方法永远不会失败。

标签: objective-c cocoa xctest


【解决方案1】:

根据这个问题 XIB outlets unit testing

我发现 NIB 是延迟加载的。您必须调用 [mvc loadView] 才能连接所有插座。

【讨论】:

  • NIB 是延迟加载的,但加载它们的适当方法是访问view 属性,而不是直接调用loadView,因为该问题的答案表明您是否仔细阅读。
  • 在这种情况下,人们会执行 [mvc.view subViews] 并找到 tableView 或正在测试的那个,对吧?如果您想测试 nib 中不是视图的其他对象,即数组控制器,该怎么办?
  • 一旦您使用[mvc view]; 强制加载,您就可以照常访问您的IBOutlets。我只是建议您使用[mvc view]; 而不是[mvc loadView];,因为它会调用视图加载机制,因为它通常会被调用(通常您不会直接调用 loadView)。
猜你喜欢
  • 2015-08-11
  • 2019-10-09
  • 2017-11-11
  • 2014-02-13
  • 2017-11-05
  • 2017-01-08
  • 2016-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多