测试时如何配置 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 不会在单元测试中保留对象