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

Posted

技术标签:

【中文标题】如何在“单元测试”中为按钮添加点击操作并显示警报【英文标题】:How to add tap action for button in "Unit Testing" and show Alert 【发布时间】:2018-03-16 13:26:22 【问题描述】:

我正在尝试为我的登录表单编写一个单元测试用例,如果用户名和密码为空,那么我们单击登录按钮它将显示警报,我想为这种情况编写测试用例,对我来说按钮操作不起作用并且单元测试未显示警报,我正在寻找解决方案很长时间任何人都可以提供帮助..谢谢!

【问题讨论】:

在单元测试时,您正在测试小单元。您需要自己调用按钮选择器来模拟按钮获取,然后检查您的警报是否已初始化。 感谢您的回复,是的。但是有没有办法用单元测试类本身来处理按钮的 IBAction 函数.. 可以通过链接***.com/questions/18699524/… 你喜欢 Swift 还是 Objective-C? 是的,我正在编写 swift 代码,从控制器调用按钮操作,但是我无法测试是否显示警报..您知道如何在单元测试中检查警报是否显示。 【参考方案1】:

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

但要回答你的问题:

要测试按钮动作,单元测试可以调用sendActions(for: .touchUpInside) 要测试标准警报,请使用ViewControllerPresentationSpy。

在显示任何警报之前,导入 ViewControllerPresentationSpy 并在您的测试中创建一个 AlertVerifier:

let alertVerifier = AlertVerifier()

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

您现在可以调用verify 方法:

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

    sut.loginButton.sendActions(for: .touchUpInside)

    alertVerifier.verify(
            title: "Title",
            message: "Message",
            animated: true,
            presentingViewController: sut,
            actions: [
                .default("OK"),
            ]
    )

要测试警告没有出现,请使用

XCTAssertEqual(alertVerifier.presentedCount, 0)

要调用一个动作,请执行以下操作:

func test_showAlertThenTapOKButton() throws 
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let sut = storyboard.instantiateInitialViewController() as! ViewController
    sut.loadViewIfNeeded()
    let alertVerifier = AlertVerifier()

    try alertVerifier.executeActions(forButton: "OK")

    // Check for expected results

【讨论】:

非常感谢,很棒的解决方案和令人惊叹的解释,您节省了我的时间。效果很好。

以上是关于如何在“单元测试”中为按钮添加点击操作并显示警报的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xcode 中为 Apple Watch 添加单元测试?

如何在 qt 中为 GUI 添加可点击按钮

如何在 Swift 的警报中为按钮添加操作

如何在 intellij 中为播放框架应用程序运行单元测试

如何在安卓中为按钮添加颜色

如何在 Unity3D 单元测试中显示代码覆盖率?