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

有人试图用新的Xcode 7 UItesting包含模拟数据?

  • 你有没有使用特定的框架?
  • 你是如何pipe理目标的?

我认为有很多方法可以解决这个问题 – 难点在于苹果公司有意devise的UITests完全独立于被testing的应用程序。 也就是说,可以使用几个钩子来协调应用程序中的逻辑与testing中的逻辑,以任何方式提供模拟数据或改变应用程序的行为。 我发现最有用的两个是launchEnvironmentlaunchEnvironment

在你的testing中 – XCUIApplication().launchArguments NSProcessInfo.processInfo().arguments对应于你的应用代码中的NSProcessInfo.processInfo().arguments

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

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

 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 } } 

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