在UI测试中将模拟数据插入Core Data

时间:2017-02-16 21:25:57

标签: swift core-data xcode-ui-testing

我的应用程序目前正在使用Core Data作为持久性,我想用一些模拟数据进行一些UI测试。目前,我在开发时使用先前存储的数据运行UI测试。理想情况下,我想在MOC中插入一些模拟数据,以便我可以编写更多的UI测试。对于我的单元测试,我将数据从JSON文件插入到setup函数中的托管对象上下文中。我想知道这是否可以进行UI测试?

我试过在线查看这个,但我已经从人们那里读到了很多不同的答案,我现在很困惑。如果这是不可能的,那么有人可以推荐使用核心数据进行UI测试的最佳实践吗?

1 个答案:

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