我想为我的Core Data应用程序添加单元测试,但我确定如何重置测试之间的上下文. 这是我的CoreDataStack对象: public final class CoreDataStack { var storeType: StoreType! public init(storeType: StoreType) { sel
这是我的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)