Когда я пытаюсь использовать Core Data с NSInMemoryStoreType
для модульного тестирования, я всегда получаю эту ошибку:
Failed to find a unique match for an NSEntityDescription to a managed object subclass
Это мой объект для создания стека основных данных:
public enum StoreType {
case sqLite
case binary
case inMemory
.................
}
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
}
public func reset() {
for store in persistentContainer.persistentStoreCoordinator.persistentStores {
guard let url = store.url else { return }
try! persistentContainer.persistentStoreCoordinator.remove(store)
try! FileManager.default.removeItem(at: url)
}
}
}
И вот как я использую это в моем проекте модульного тестирования:
class MyTests: XCTestCase {
var context: NSManagedObjectContext!
var stack: CoreDataStack!
override func setUp() {
stack = CoreDataStack(storeType: .inMemory)
context = stack.context
}
override func tearDown() {
stack.reset()
context = nil
}
}
Из того, что я прочитал здесь , что, кажется, та же проблема, что и у меня, я долженочищайте все после каждого теста, который я (думаю) делаю.
Я не убираюсь правильно?Есть ли другой способ сделать это?