簡體   English   中英

檢查視圖控制器是否已成功關閉動畫

[英]Check that a view controller successfully dismissed with animation

我是iOS開發人員的新手,正在嘗試為一個類編寫單元測試用例。 它只有一個名為homeButtonTouched()的方法,該方法通過動畫關閉視圖控制器。 如何為此編寫單元測試? 這是該類的樣子。

class AboutViewController: UIViewController {

    // MARK: Action
    @IBAction func homeButtonTouched(_ sender: UIButton) {
        dismiss(animated: true, completion: nil)
    }
}

到目前為止,這是我在測試課中寫的。 我所需要做的就是填寫testHomeButtonTouched()方法。

class AboutViewControllerTests: XCTestCase {

    var aboutViewController: AboutViewController!

    override func setUp() {
        aboutViewController = UIStoryboard(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "About View Controller") as! AboutViewController
        aboutViewController.loadView()

        super.setUp()
    }

    override func tearDown() {
        aboutViewController = nil

        super.tearDown()
    }

    /** Test that pressing the home button dismisses the view controller */
    func testHomeButtonTouched() {

    }

}

為此使用UI測試。 通過轉到文件->新建->目標-> iOS UI測試包創建一個新的測試文件。

使用Cmd + U運行測試腳本。 然后使用控制台上方的紅色記錄按鈕自動記錄測試,這時您需要做的就是使用模擬器關閉視圖控制器,xcode將為您編寫一個測試。

不過,要回答您的問題,如果要檢查是否關閉了視圖控制器,可以編寫一個斷言,以檢查它是否是當前提供的視圖控制器,如下所示:

if var topController = UIApplication.shared.keyWindow?.rootViewController {
  while let presentedViewController = topController.presentedViewController {
    topController = presentedViewController
  }
XCTAssertTrue(!topController is AboutViewController)
}

您可以創建一個模擬類,並覆蓋原始類的任何函數調用,以測試該函數是否已被調用。 如:

func test_ShouldCloseItself() {
    // mock dismiss call
    class MockViewController: LoginViewController {
        var dismissCalled = false
        override func dismiss(animated flag: Bool, completion: (() -> Void)? = nil) {
            self.dismissCalled = true
        }
    }

    let vc = MockViewController()
    vc.actionClose(self)
    XCTAssertTrue(vc.dismissCalled)

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM