swift - 如何让单元测试访问核心数据模型

标签 swift xcode swift3

假设我在我的项目中创建了 Core Data 模型。我有其他类的方法接受这些模型并根据它们的属性执行一些功能。我如何对这些类进行单元测试?

对于普通的 Swift 文件,我在 Xcode 中选择它们并勾选一个框,使这些文件中定义的任何类对项目的单元测试部分可见。我的问题本质上是,如何让我的核心数据模型也对测试可见?

请注意,我不想在核心数据堆栈上执行任何操作,我只想能够创建模型的实例并将其传递到方法中。

最佳答案

由于 CoreData 使用托管对象,NSManagedObject 的任何子类在功能上都是毫无值(value)的,除非附加到上下文。

测试的一个技巧是在内存中创建一个 NSManagedObjectContext 并使用该上下文创建对象测试。 Outlined Here

这是在内存中创建上下文的代码:

func setUpInMemoryManagedObjectContext() -> NSManagedObjectContext {
    let managedObjectModel = NSManagedObjectModel.mergedModelFromBundles([NSBundle.mainBundle()])!

    let persistentStoreCoordinator = NSPersistentStoreCoordinator(managedObjectModel: managedObjectModel)

    do {
        try persistentStoreCoordinator.addPersistentStoreWithType(NSInMemoryStoreType, configuration: nil, URL: nil, options: nil)
    } catch {
        print("Adding in-memory persistent store failed")
    }

    let managedObjectContext = NSManagedObjectContext()
    managedObjectContext.persistentStoreCoordinator = persistentStoreCoordinator

    return managedObjectContext
}

关于swift - 如何让单元测试访问核心数据模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41985415/

相关文章:

ios - 在 Swift 3 中创建一个 UIToolbar

swift - 为什么我的声音让我的游戏在 Swift Spritekit 中滞后?

ios - swift中元素的宽度

objective-c - React Native 桥接在 swift 模块中有时为零

objective-c - 将WKWebView嵌入YouTube

swift - 使用PHPickerViewController拍摄照片时如何获取文件名

json - 快速解析JSON数据

ios - 如何使用用户默认值保存和获取按钮启用和禁用值

swift - UITableView 复选框(按下另一个按钮时选择一个按钮)

iOS swift 3 编码 tableview 编辑按钮使用 UIButton 而不是 UIBarButton