CoreData的XCTestCase失败,"无法找到myappTests.Example的实体"

san*_*mai 7 core-data ios xctest swift

我可以在XCTestCase测试中创建一个这样的实体就好了:

let entity = NSEntityDescription.insertNewObject(
                   forEntityName: String(describing: Example.self), 
                   into: inMemoryManagedObjectContext)
Run Code Online (Sandbox Code Playgroud)

但如果我这样做:

let item = Example(context: inMemoryManagedObjectContext)
Run Code Online (Sandbox Code Playgroud)

测试会因......而失败

failed: caught "NSInvalidArgumentException", "An NSManagedObject of
class 'myappTests.Example' must have a valid NSEntityDescription."
Run Code Online (Sandbox Code Playgroud)

如果我不能像通常那样创建它们,我应该如何测试Core Data对象?

Las*_*ove 3

我也遇到了这个问题:) 我猜问题是 CoreData 还不知道这些实体。因此,能够测试它的我的解决方案是在测试时拥有一个 NSPersistantContainer 实例。

var persistentContainer: NSPersistentContainer!
    override func setUp() {
        super.setUp()
        guard let model = CoreDataUtilities.model(withName: "ModelName") else {
            return XCTFail("Model should load")
        }
        storeFolder = FileManager.default.temporaryDirectory.appendingPathComponent("storeDirectory", isDirectory: true)
        let storeURL = storeFolder.appendingPathComponent("store.db")
        let storeInfo = NSPersistentStoreDescription(url: storeURL)
        storeInfo.type = NSSQLiteStoreType
        persistentContainer = NSPersistentContainer(name: "ModelName", managedObjectModel: model)
        persistentContainer.persistentStoreDescriptions = [storeInfo]
        return
    }
Run Code Online (Sandbox Code Playgroud)

现在您可以以经典方式使用 CoreData。