【发布时间】:2019-09-14 07:18:57
【问题描述】:
我正在尝试对视图控制器的内存进行单元测试,以查看它们在被解除时是否正确取消初始化。
class SettingsViewControllerTests: XCTestCase {
var controller: SettingsViewController!
override func setUp() {
super.setUp()
let storyboard = UIStoryboard(name: "Main", bundle: nil)
controller = storyboard.instantiateViewController(withIdentifier: "SettingsViewController")
as? SettingsViewController
//load view hierarchy
_ = controller.view
}
func testLogout() {
let sideMenu = MockSideMenuViewController()
var navController: UINavigationController? = UINavigationController(rootViewController: sideMenu)
sideMenu.show(navController!, sender: nil)
navController?.pushViewController(controller, animated: true)
expect(navController).toNot(beNil())
controller.dismiss(animated: false, completion: nil)
expect(navController).toEventually(beNil(), timeout: 3) // fails
expect(self.controller).toEventually(beNil(), timeout: 3) // fails
}
在应用程序中,我使用 segue 来展示我的导航控制器 + SettingsViewController。它有一个调用 dismiss 的方法,但是当我检查我的控制器实例时,它们仍然存在。在我的视图控制器中,我设置了一个打印语句来检查是否调用了 deinit,当我完成应用程序上的步骤时,它确实被调用(两个控制器最终都转到nil)。然而,单元测试并没有做同样的事情。我错过了什么?
【问题讨论】:
标签: ios swift unit-testing uikit