如何让单元测试访问 Core Data 模型

Gre*_*reg 1 xcode swift swift3

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

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

请注意,我不想在 Core Data 堆栈上执行任何操作,我只想能够创建模型的实例并将其传递给方法。

Str*_*ers 6

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

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

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

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
}
Run Code Online (Sandbox Code Playgroud)