0

我正在UiViewController用 XCUnitTests 测试我的 s。

有时我必须模拟UIViewController以捕获方法调用。例如是否performSegue已被调用。

有时我测试的一种方法(例如viewDidLoad)访问 IBOutlet。当我创建一个自定义模拟子类然后说mockViewController.textfield = UITextField()一切都很好。

但是,当我想手动实例化 aUIView或 aUIStackView时,变量仍然是 nil,即使 a 的初始化UIView程序永远不会返回 nil。为什么?

也许这与UIViews 和UIStackViews 没有内在内容大小有关?我该如何解决?

4

1 回答 1

1

就在发布这个问题之后,我已经找到了答案。

我手动实例化的视图消失的原因是 my@IBOutlet是一个weak var. Weak简单地说,变量本身不能使实例保持活动状态。您需要一些其他变量来保持实例处于活动状态。在我的情况下,而不是做

mockViewController.stackView = UIStackView()

我愿意

let stackView = UIStackView() mockViewController.stackView = stackView

这样,变量stackView可以使实例保持活动状态。

于 2018-03-10T20:11:46.620 回答