如何在Xcode 7上模拟UITest中的数据?

时间:2015-07-14 10:10:15

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

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

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

1 个答案:

答案 0 :(得分: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 
    }
}

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