【问题标题】:Insert mock data into Core Data in UI Test在 UI 测试中将模拟数据插入 Core Data
【发布时间】:2017-02-16 21:25:56
【问题描述】:

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

我曾尝试在网上查找此内容,但我从人们那里阅读了很多不同的答案,以至于我现在感到困惑。如果这不可能,谁能推荐使用核心数据进行 UI 测试的最佳实践?

【问题讨论】:

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


    【解决方案1】:

    无法在您的 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
        }
    }
    

    【讨论】:

    • 这样,我还可以自定义每次测试运行的数据。例如,我可能需要重新开始,或者我可能需要提供特定的数据——我只是为我需要的任何东西设置了一个不同的参数。不错!
    猜你喜欢
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多