测试时如何配置 In-Memory 数据库?

Posted

技术标签:

【中文标题】测试时如何配置 In-Memory 数据库?【英文标题】:How to configure In-Memory database when testing? 【发布时间】:2016-10-21 07:29:13 【问题描述】:

我检查了苹果的一些网站,大多数似乎已经过时且缺乏,因为我需要在将代码粘贴到XCode8 后转换代码。我有一个旧代码,但我不知道如何将它们迁移到新样式。

这是我的旧代码:

    self.psc = 
    let psc = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)

    do 
        _ = try psc.addPersistentStore(
         ofType: NSInMemoryStoreType, configurationName: nil,
        at: nil, options: nil)
     catch 
    fatalError()


return psc

这是我到目前为止所做的,

    lazy var testPersistentContainer: NSPersistentContainer = 
    let container = NSPersistentContainer(name: "Test Data Store")

    do 
        try container.persistentStoreCoordinator.addPersistentStore(ofType:
            NSInMemoryStoreType, configurationName: "Test Persistent Store",
                                 at: nil, options: [:])
     catch 
        let nserror = error as NSError
        fatalError("Unresolved error \(error), \(nserror.userInfo)")
    

try 语句有异常。

Error Domain=Foundation._GenericObjCError Code=0 "(null)" 致命错误: 未解决的错误 nilError

【问题讨论】:

请查看以下答案。如果它对您有帮助,只有您可以将其打勾作为答案。它将帮助其他 SO 用户解决同类问题。 我犯了一个错误,我应该勾选答案,但点击了upvote。非常感谢您的回答,它确实有帮助! 感谢您的快速回复。无论如何你都可以做到。 【参考方案1】:

可以继续使用旧方法。它已被弃用,并且NSPersistentContainer 不是必需的。

如果您想要更新的方法,请使用新的NSPersistentStoreDescription 类,它处理添加持久存储时可能指定的所有内容。

您可以尝试以下代码以获取更新的方法:

lazy var persistentContainer: NSPersistentContainer = 
            let container = NSPersistentContainer(name: "DataModel")

            // Need to add NSPersistentStoreDescription ===
            let description = NSPersistentStoreDescription()
            description.type = NSInMemoryStoreType
            container.persistentStoreDescriptions = [description]

            container.loadPersistentStores(completionHandler:  [weak self](storeDescription, error) in
                if let error = error 
                    NSLog("CoreData error \(error), \(error._userInfo)")
                    self?.errorHandler(error)
                
                )
            return container
        ()

希望这对您有所帮助。

【讨论】:

以上是关于测试时如何配置 In-Memory 数据库?的主要内容,如果未能解决你的问题,请参考以下文章

使用 H2 Database In-Memory 不会在单元测试中保留对象

如何在 TestNG 单元测试类中分配类级别数据

如何在测试中使用在 beforeAll() 钩子中分配了值的变量

In-Memory 和 MySQL DB 的不同持久性行为

cisco如何配置DHCP

In-Memory:内存数据库