核心数据迁移的自动化测试

Posted

技术标签:

【中文标题】核心数据迁移的自动化测试【英文标题】:Automated tests for Core Data Migration 【发布时间】:2015-12-11 19:21:32 【问题描述】:

我想为我的 Core Data 模型迁移创建自动化测试。我有模型的三个版本 - 1.0、1.1 和 1.2。我想在每次测试时创建一个新数据库,用假数据填充它,然后将其迁移到更新的版本,并在此过程中测试任何错误。我应该如何编写这样的测试?

【问题讨论】:

【参考方案1】:

我已经通过从mom 而不是momd 文件加载模型来解决这个问题。示例测试如下所示:

func testMigarationFrom_1_0_To_1_1() 
    let modelUrl = NSBundle.mainBundle().URLForResource("1.0", withExtension: "mom", subdirectory: "Model.momd")!
    let model = NSManagedObjectModel(contentsOfURL: modelUrl)!
    let coordinator = NSPersistentStoreCoordinator(managedObjectModel: model)
    let databaseUrl = NSURL(fileURLWithPath: NSTemporaryDirectory()).URLByAppendingPathComponent("Storage").URLByAppendingPathExtension("sqlite")
    try! coordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: databaseUrl, options: [NSMigratePersistentStoresAutomaticallyOption: true, NSInferMappingModelAutomaticallyOption: true])

    let context = NSManagedObjectContext(concurrencyType: .MainQueueConcurrencyType)
    context.persistentStoreCoordinator = coordinator

    for i in 0..<10 
        let entity = NSEntityDescription.insertNewObjectForEntityForName("entity", inManagedObjectContext: context) as! Entity
        entity.name = "test-\(i)"
    

    let newModelUrl = NSBundle.mainBundle().URLForResource("1.1", withExtension: "mom", subdirectory: "Model.momd")!
    let newModel = NSManagedObjectModel(contentsOfURL: newModelUrl)!
    let newCoordinator = NSPersistentStoreCoordinator(managedObjectModel: newModel)

    do 
        try newCoordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: databaseUrl, options: [NSMigratePersistentStoresAutomaticallyOption: true, NSInferMappingModelAutomaticallyOption: true])
     catch let error 
        XCTFail("Should migrate without error, got \(error)")
    

【讨论】:

以上是关于核心数据迁移的自动化测试的主要内容,如果未能解决你的问题,请参考以下文章

Python接口自动化核心模块

核心数据测试迁移映射模型

Core Data 自动迁移不会在我的新模型中创建新实体

三年磨一剑,robot framework 自动化测试框架核心指南,真正讲透robot framework自动化测试框架(笔者新书上架)。

python 接口自动化测试--框架整改

无法在CLoud格式模板中测试AWS DMS端点