10

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

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

1 回答 1

9

我认为有很多方法可以解决这个问题 - 困难在于 Apple 有意设计 UITests 以完全独立于被测应用程序运行。也就是说,您可以使用一些钩子来协调应用程序中的逻辑与测试中的逻辑,以提供模拟数据或以任何方式改变应用程序的行为。我发现最有用的两个是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-11-20T00:18:56.053 回答