Xcode UI 测试示例

Xcode UI Test example

我最近才了解到 Unit Testing in Xcode。现在我正在尝试 Xcode 7,当我创建一个新项目时,我看到有一个新组用于 UI 测试。

我看了WWDC 2015 video,还不错,但是你有没有一个超级简单的例子,我可以自己过一遍?视频示例对我来说有点太复杂了。

注释

使用单元测试 来测试您类 中方法的有效性。您使用它们来测试您编写的代码。 (有关在 Xcode 中设置简单单元测试的信息,请参阅 my other example。)

使用UI 测试 检查用户界面的有效性。可以把它想象成让你自己的机器人通过并与你的应用程序进行普通用户会进行的所有正常交互。这样可以节省您自己做的时间。

在撰写本文时,很难访问 UI 组件的许多属性,但只需通过点击和滑动它们进行测试即可确认它们在那里。

例子

这是我能想到的最简单的设置和 UI 测试:按下按钮会更改标签的文本。

设置

  • 在 Xcode 7+ 中为 iOS 9.0+ 创建一个新项目。
  • 确保选中 UI 测试

  • 如果要将 UI 测试添加到 Xcode 7 之前创建的项目,请参阅 this answer。 (文件 > 新建 > 目标 > 测试 > Cocoa 触摸 UI 测试包)

  • 在情节提要中添加一个 UILabel 和一个 UIButton

  • ViewController 中创建一个 @IBOutlet 和 @IBAction 并在按下 button 时更改 label 文本。

    import UIKit
    class ViewController: UIViewController {
        @IBOutlet weak var label: UILabel!
        @IBAction func button(sender: AnyObject) {
            label.text = "Hello"
        }
    }
    

做测试

  • 打开YourProjectUI测试文件。

  • 将光标放在 testExample() 方法中。 (可以删除评论)

  • 按红色录制按钮

  • 在应用中,(1) 点击标签,(2) 点击按钮,然后 (3) 再次点击标签。 (4) 再次按下录音按钮停止录音。应该已经为您自动生成了以下代码:

    func testExample() {
    
        let app = XCUIApplication()
        app.staticTexts["Label"].tap()
        app.buttons["Button"].tap()
        app.staticTexts["Hello"].tap()
    }
    
  • 使用 staticText 行作为制作 XCTAssert 的起点。现在你应该有:

    func testExample() {
    
        let app = XCUIApplication()
        XCTAssert(app.staticTexts["Label"].exists)
        app.buttons["Button"].tap()
        XCTAssert(app.staticTexts["Hello"].exists)
    }
    
  • 按左边的菱形进行运行UI测试。当它通过时应该变成绿色。

  • 就是这样!这表明 UIButtonUILabel 存在并且标签的文本发生了变化。如果你想看到它失败(一个好主意),你可以将 "Hello" 更改为其他内容。

进一步研究

@Suragch +1 的答案。我观察到并想分享的一件事是 UI 测试用例中的每个函数都必须以 "test" 开头。您可以在此之后附加额外的名称。只有这样,按钮(用于单击以开始测试)才会出现。