如何在“单元测试”中为按钮添加点击操作并显示警报

时间:2018-03-16 13:26:22

标签: ios unit-testing xctest uialertcontroller

我正在尝试为我的登录表单编写一个单元测试用例,如果用户名和密码为空,那么我们点击登录按钮它会显示警告,我想为这个场景编写测试用例,对我来说按钮动作不起作用,警告没有显示单元测试,我正在寻找解决方案很长一段时间任何人都可以帮助..谢谢!

1 个答案:

答案 0 :(得分:2)

首先,我要说的是,您可以考虑禁用“登录”按钮,而不是警报,直到“用户名”和“密码”为空。

但要回答你的问题:

  • 要测试按钮操作,单元测试可以调用sendActions(for: .touchUpInside)
  • 要测试标准提醒,请使用MockUIAlertController。这是一个Objective-C框架,因此我们需要采取一些步骤使Swift可以访问它。

首先,您需要为测试目标创建一个Objective-C桥接头。创建一个空头文件。我的测试目标名为SimpleLoginTests,因此我创建了SimpleLoginTests-Bridging-Header.h。然后在测试目标的Build Settings中,指定文件路径:

Objective-C bridging header for tests

然后将MockUIAlertController添加到此标头:

#import <MockUIAlertController/QCOMockAlertVerifier.h>

最后,在出现任何警报之前,在测试中创建一个QCOMockAlertVerifier:

let alertVerifier = QCOMockAlertVerifier()

然后调用可能会或可能不会显示警报的触发器。在您的情况下,按钮上的.touchUpInside

现在,您可以检查alertVerifier属性的状态,从警报数开始。这是一个完整的示例,其中sut代表系统测试:

func testTappingLoginButton_ShouldPresentAlert() {
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let sut = storyboard.instantiateInitialViewController() as! ViewController
    sut.loadViewIfNeeded()
    let alertVerifier = QCOMockAlertVerifier()

    sut.loginButton.sendActions(for: .touchUpInside)

    XCTAssertEqual(alertVerifier.presentedCount, 1)
}

QCOMockAlertVerifier除了presentedCount之外还有许多属性。

在我的博文https://qualitycoding.org/testing-uialertcontroller/中,您还可以看到如何调用警报按钮。