【问题标题】:Xcode UI Test exampleXcode UI 测试示例
【发布时间】:2015-10-14 13:12:51
【问题描述】:

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

我看了WWDC 2015 video 并且非常好,但是你有一个超级简单的例子我可以自己经历吗?视频示例对我来说有点太复杂了。

备注

【问题讨论】:

    标签: ios xcode ui-testing xcode-ui-testing


    【解决方案1】:

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

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

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

    示例

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

    设置

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

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

    • UILabelUIButton 添加到情节提要

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

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

    做测试

    • 打开 YourProjectUITests 文件。

    • 将光标放入testExample() 方法中。 (您可以删除 cmets)

    • 按下红色的录制按钮

    • 在应用程序中,(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”更改为其他内容。

    进一步研究

    【讨论】:

    • 如何确定更改的是标签?如果它是一个按钮,则更改为“Hello”,测试也将通过。一种选择是检查标签和按钮是否存在,但这不是通用的。如果我们想将标签更改为空字符串而不是“Hello”怎么办? app.staticTexts[""].exists 几乎总是正确的。
    • 为什么我们不能使用accessibilityIdentifer 来识别元素,而不是像“Hello”这样的硬编码文本。这总是有帮助的,即使将来会更改文本。
    • 我相信这可能会更好。上面的答案是我在没有任何其他简单示例的情况下试图弄清楚 UI 测试时所做的。随意为这个问题添加另一个答案,以改进我的答案。
    • 谢谢!它节省了我的时间。
    • 真的没有官方文档说明如何在 iOS 中编写 UI 测试吗?我找到了此页面developer.apple.com/documentation/xctest/user_interface_tests,但没有示例,而且您肯定会说 XCTAssert(app.staticTexts["Label"].exists) 之类的内容并不明显。官方指南在哪里?
    【解决方案2】:

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

    【讨论】:

    • 您可以建议编辑或评论。单独的答案确实有意义。
    猜你喜欢
    • 2015-12-13
    • 1970-01-01
    • 2016-09-13
    • 2015-09-19
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    相关资源
    最近更新 更多