我的应用程序目前正在使用Core Data作为持久性,我想用一些模拟数据进行一些UI测试。目前,我在开发时使用先前存储的数据运行UI测试。理想情况下,我想在MOC中插入一些模拟数据,以便我可以编写更多的UI测试。对于我的单元测试,我将数据从JSON文件插入到setup函数中的托管对象上下文中。我想知道这是否可以进行UI测试?
我试过在线查看这个,但我已经从人们那里读到了很多不同的答案,我现在很困惑。如果这是不可能的,那么有人可以推荐使用核心数据进行UI测试的最佳实践吗?
答案 0 :(得分:2)
无法在UITest类中创建模型数据,因为UITest类无法访问应用程序的代码。
来自Apple's Docs:
UI测试与基本方式的单元测试不同。单元测试 使您能够在应用程序的范围内工作,并允许您锻炼 功能和方法,可以完全访问您的应用程序的变量和 州。 UI测试以与用户相同的方式练习应用程序的UI 无法访问应用程序的内部方法,功能和 变量。这使您的测试能够以与用户相同的方式查看应用程序 确实暴露了用户遇到的UI问题。
如果您想在运行UITests时使用模拟数据,您可以在应用程序代码中创建模拟数据,然后确保仅在运行UITests时创建模拟数据。
要完成这项工作,您必须执行以下步骤:
1)在UITest类中启动应用程序时添加启动参数:
func testExample() {
let app = XCUIApplication()
app.launchArguments.append("IS_RUNNING_UITEST")
app.launch()
// Do your tests
}
2)将创建模拟数据的代码添加到您的应用中(例如,在AppDelegate
中)并在启动参数出现时运行:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
if ProcessInfo.processInfo.arguments.contains("IS_RUNNING_UITEST") {
// insert data from a JSON file into the managed object context
}
}