【问题标题】:How to mock data in UITest on Xcode 7?如何在 Xcode 7 上的 UITest 中模拟数据?
【发布时间】:2015-10-02 21:59:56
【问题描述】:

有人尝试在新的 Xcode 7 UI 测试中包含模拟数据?

  • 您是否使用过特定的框架?
  • 您是如何管理目标的?

【问题讨论】:

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


    【解决方案1】:

    我认为有很多方法可以解决这个问题 - 困难在于 Apple 有意将 UITest 设计为完全独立于被测应用程序运行。也就是说,您可以使用一些挂钩来协调应用程序中的逻辑与测试中的逻辑,以提供模拟数据或以任何方式改变应用程序的行为。我发现最有用的两个是launchEnvironmentlaunchArguments

    在您的测试中 - XCUIApplication().launchArguments 对应于您的应用代码中的 NSProcessInfo.processInfo().arguments

    同样: XCUIApplication().launchEnvironment -> NSProcessInfo.processInfo().environment

    launchEnvironment 是一个简单的字典,而启动参数是一个数组。在您的测试中,您可以在启动应用程序之前将任何您喜欢的值输入到这些参数中:

    let app = XCUIApplication()
    app.launchEnvironment["-FakedFeedResponse"] = "success.json"
    app.launch()
    

    然后在您的应用程序逻辑中,您可以随意打开这些值。比如:

    func fetchFeed() -> JSON {
        if let fakedJSONFilename = NSProcessInfo.processInfo().environment["-FakedFeedResponse"] {
            let fakePayload = fakeDataFileNamed(fakedJSONFilename)
            return fakePayload
        } else {
           //Make network call and return a real JSON payload 
        }
    }
    

    使用此模式,您的伪造/模拟数据将需要包含为应用目标成员的文件。

    【讨论】:

    • 谢谢!我只是花了几个小时尝试将参数传递到应用程序目标中,这成功了。
    • 用与测试相关的代码污染你的代码是很愚蠢的,例如在这种情况下检查它是否是虚假的提要或应该从服务器获取......
    猜你喜欢
    • 2015-12-22
    • 2015-12-29
    • 2018-04-07
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    相关资源
    最近更新 更多