当我打电话
UIApplication.shared.keyWindow
要尝试在我的测试类中设置根视图控制器,键窗口将返回nil。为什么会这样呢?
这是我设置情节提要的方法:
let testBoard = UIStoryboard(name: "TestStoryboard", bundle: Bundle(for: type(of: self))) let vc = testBoard.instantiateViewController(withIdentifier: "TestController") UIApplication.shared.keyWindow?.rootViewController = vc _ = vc.view vc.viewDidLoad()
InsertWittyN.. 5
创建一个窗口并分配视图控制器。
let testBoard = UIStoryboard(name: "TestStoryboard", bundle: Bundle(for: type(of: self))) let vc = testBoard.instantiateViewController(withIdentifier: "TestController") let window = UIWindow() window.rootViewController = vc window.makeKeyAndVisible() vc.view.layoutIfNeeded() // Add test here
之后,我注意到您还在致电vc.view
和viewDidLoad
。我建议只访问视图以使其加载,而不viewDidLoad
隐式调用-我个人使用vc.view.layoutIfNeeded()
根据您实际需要测试的内容,对我而言,很少需要将视图控制器分配给窗口本身。通常,您只需要创建视图控制器的实例就可以摆脱困境,如果您要测试任何UI代码,还请确保已填充视图。
我唯一需要将视图控制器分配给窗口的次数之一是在测试导航之类的东西时,我想断言由于某种动作,另一个视图控制器正在模态显示。
创建一个窗口并分配视图控制器。
let testBoard = UIStoryboard(name: "TestStoryboard", bundle: Bundle(for: type(of: self))) let vc = testBoard.instantiateViewController(withIdentifier: "TestController") let window = UIWindow() window.rootViewController = vc window.makeKeyAndVisible() vc.view.layoutIfNeeded() // Add test here
之后,我注意到您还在致电vc.view
和viewDidLoad
。我建议只访问视图以使其加载,而不viewDidLoad
隐式调用-我个人使用vc.view.layoutIfNeeded()
根据您实际需要测试的内容,对我而言,很少需要将视图控制器分配给窗口本身。通常,您只需要创建视图控制器的实例就可以摆脱困境,如果您要测试任何UI代码,还请确保已填充视图。
我唯一需要将视图控制器分配给窗口的次数之一是在测试导航之类的东西时,我想断言由于某种动作,另一个视图控制器正在模态显示。