Swift cannot test core data in Xcode tests?

前端 未结 5 771
失恋的感觉
失恋的感觉 2021-02-02 12:42

I am working on a iOS project that uses core data. I am using swift. The Core Data stack is setup right and all seems to be fine. I have created a class for an entity (NSManage

5条回答
  •  半阙折子戏
    2021-02-02 13:36

    The code example from Ludovic does not cover subentities. So when setting a parent entity in CoreData, the app crashes.

    Adapted the code to take subentities into account:

    private func createManagedObjectModel() {
    
        // Get module name
        var moduleName: String = "ModuleName"
        let environment = NSProcessInfo.processInfo().environment as! [String : AnyObject]
        let isTest = (environment["XCInjectBundle"] as? String)?.pathExtension == "xctest"
        if isTest { moduleName = "ModuleNameTests" }
    
        // Get model
        let modelURL = NSBundle.mainBundle().URLForResource(self.storeName, withExtension: "momd")!
        let model = NSManagedObjectModel(contentsOfURL: modelURL)!
    
        // Create entity copies
        var newEntities = [NSEntityDescription]()
        for (_, entity) in enumerate(model.entities) {
            let newEntity = entity.copy() as! NSEntityDescription
            newEntity.managedObjectClassName = "\(moduleName).\(entity.managedObjectClassName)"
            newEntities.append(newEntity)
        }
    
        // Set correct subentities
        for (_, entity) in enumerate(newEntities) {
            var newSubEntities = [NSEntityDescription]()
            for subEntity in entity.subentities! {
                for (_, entity) in enumerate(newEntities) {
                    if subEntity.name == entity.name {
                        newSubEntities.append(entity)
                    }
                }
            }
            entity.subentities = newSubEntities
        }
    
        // Set model
        self.managedObjectModel = NSManagedObjectModel()
        self.managedObjectModel.entities = newEntities
    }
    

提交回复
热议问题