检查视图控制器是不是通过动画成功关闭
Posted
技术标签:
【中文标题】检查视图控制器是不是通过动画成功关闭【英文标题】:Check that a view controller successfully dismissed with animation检查视图控制器是否通过动画成功关闭 【发布时间】:2018-01-07 01:37:26 【问题描述】:我对 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 和查看控制器演示?您可以对此类事情使用 UI 测试。 就像我说的,我对测试很陌生。不过,您的意见很有帮助,谢谢! 【参考方案1】:您可以创建一个模拟类并覆盖原始类的任何 func 调用以测试该 func 是否已被调用。比如这样:
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)
【讨论】:
【参考方案2】:为此使用 UI 测试。通过 File->New->Target->iOS UI Testing Bundle 创建一个新的测试文件。
使用 Cmd+U 运行测试脚本。然后使用控制台上方的红色记录按钮自动记录一个测试,此时您需要做的就是使用模拟器关闭视图控制器,xcode 将为您编写一个测试。
不过,要回答您的问题,如果您想检查您的视图控制器是否已关闭,您可以编写一个断言来检查它是否是当前呈现的视图控制器,如下所示:
if var topController = UIApplication.shared.keyWindow?.rootViewController
while let presentedViewController = topController.presentedViewController
topController = presentedViewController
XCTAssertTrue(!topController is AboutViewController)
【讨论】:
我也可以使用 XCTAssertFalse(topController is AboutViewController) 吗?以上是关于检查视图控制器是不是通过动画成功关闭的主要内容,如果未能解决你的问题,请参考以下文章