如何拆除核心数据堆栈?
How to tear down Core Data Stack?
我想为我的 Core Data 应用程序添加单元测试,但我知道如何重置测试之间的上下文。
这是我的 CoreDataStack
对象:
public final class CoreDataStack {
var storeType: StoreType!
public init(storeType: StoreType) {
self.storeType = storeType
}
lazy var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "Transaction")
container.loadPersistentStores(completionHandler: { (description, error) in
if let error = error {
fatalError("Unresolved error \(error), \(error.localizedDescription)")
} else {
description.type = self.storeType.type
}
})
return container
}()
public var context: NSManagedObjectContext {
return persistentContainer.viewContext
}
}
这就是我在测试中使用它的方式:
class PaymentTests: XCTestCase {
var context: NSManagedObjectContext!
override func setUp() {
super.setUp()
let coreDataStack = CoreDataStack(storeType: .inMemory)
context = coreDataStack.context
}
}
我尝试在 tearDown
函数中调用 context.reset()
,但是数据没有被重置,它总是持久的。
那么我该如何拆除核心数据栈呢?
旧数据与您的上下文无关,但与您的 PersistentStore
无关。这就是您使用 Core Data 的目的,持久化您的数据。
在 setup()
中初始化您的堆栈之前删除存储以清除您的数据。你可以这样找到它:
let storeUrl = persistentContainer.persistentStoreCoordinator.persistentStores.first!.url!
并像这样删除它:
let fileManager = FileManager.default
fileManager.removeItem(at: storeUrl)
自 2015 年以来,Apple 推出了一种名为 destroyPersistentStore(at:,ofType:,options:)
的新方法
guard let storeURL = persistentContainer.persistentStoreCoordinator.persistentStores.first?.url else {
return
}
do {
try self.persistentContainer.persistentStoreCoordinator.destroyPersistentStore(at: storeURL, ofType: NSSQLiteStoreType, options: nil)
} catch {
print(error)
}
新方法应该是这样的。
我想为我的 Core Data 应用程序添加单元测试,但我知道如何重置测试之间的上下文。
这是我的 CoreDataStack
对象:
public final class CoreDataStack {
var storeType: StoreType!
public init(storeType: StoreType) {
self.storeType = storeType
}
lazy var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "Transaction")
container.loadPersistentStores(completionHandler: { (description, error) in
if let error = error {
fatalError("Unresolved error \(error), \(error.localizedDescription)")
} else {
description.type = self.storeType.type
}
})
return container
}()
public var context: NSManagedObjectContext {
return persistentContainer.viewContext
}
}
这就是我在测试中使用它的方式:
class PaymentTests: XCTestCase {
var context: NSManagedObjectContext!
override func setUp() {
super.setUp()
let coreDataStack = CoreDataStack(storeType: .inMemory)
context = coreDataStack.context
}
}
我尝试在 tearDown
函数中调用 context.reset()
,但是数据没有被重置,它总是持久的。
那么我该如何拆除核心数据栈呢?
旧数据与您的上下文无关,但与您的 PersistentStore
无关。这就是您使用 Core Data 的目的,持久化您的数据。
在 setup()
中初始化您的堆栈之前删除存储以清除您的数据。你可以这样找到它:
let storeUrl = persistentContainer.persistentStoreCoordinator.persistentStores.first!.url!
并像这样删除它:
let fileManager = FileManager.default
fileManager.removeItem(at: storeUrl)
自 2015 年以来,Apple 推出了一种名为 destroyPersistentStore(at:,ofType:,options:)
guard let storeURL = persistentContainer.persistentStoreCoordinator.persistentStores.first?.url else {
return
}
do {
try self.persistentContainer.persistentStoreCoordinator.destroyPersistentStore(at: storeURL, ofType: NSSQLiteStoreType, options: nil)
} catch {
print(error)
}
新方法应该是这样的。