Я пытаюсь выполнить модульное тестирование памяти моих контроллеров представлений, чтобы определить, правильно ли они деинициализируются при прекращении работы.
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
). Модульный тест, однако, не делает то же самое. Чего мне не хватает?