Xcode 11 : iOS 13 在单元测试时特别不再触发 `viewDidAppear`

Xcode 11 : iOS 13 specifically no longer triggers `viewDidAppear` when unit testing

具体来说,这在使用 iOS 12:

进行测试时会通过
let viewController = ViewController()
let _ = viewController.view
let window = UIWindow(frame: UIScreen.main.bounds)
window.layer.speed = 10
viewController.modalPresentationStyle = .fullScreen
viewController.beginAppearanceTransition(true, animated: false)
window.rootViewController = viewController
window.makeKeyAndVisible()
viewController.endAppearanceTransition()
...
XCTAssert(vc.viewDidAppearCalled == true)

不再通过。 ViewController 的 viewDidLoadviewWillAppear 仍然被调用。

有什么想法吗?

完整示例可在此处找到:https://github.com/nickm01/Test13ViewWillAppear

在 iOS13 中,ViewController 生命周期发生了微妙的变化。 viewWillAppear 等现在异步加载,因此需要进行某种程度的异步测试(或等待)。找不到关于此的任何文档,我确定其中有细微之处,但这解决了问题。