Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 内存域迁移中的测试_Swift_Unit Testing_Migration_Realm - Fatal编程技术网

Swift 内存域迁移中的测试

Swift 内存域迁移中的测试,swift,unit-testing,migration,realm,Swift,Unit Testing,Migration,Realm,我们正在尝试使用XCTest对领域迁移过程进行单元测试。我们的想法是在设置测试时准备一个内存域。该领域将包含一组存储的模型,模拟一些启动条件 在测试期间,我们希望模拟迁移过程,并检查迁移域的最终状态 我们使用配置工厂配置第一个领域: func getConfiguration() -> Realm.Configuration { return Realm.Configuration(inMemoryIdentifier: "AppTest", readOnly:

我们正在尝试使用
XCTest
对领域迁移过程进行单元测试。我们的想法是在设置测试时准备一个内存域。该领域将包含一组存储的模型,模拟一些启动条件

在测试期间,我们希望模拟迁移过程,并检查迁移域的最终状态

我们使用
配置
工厂配置第一个
领域

func getConfiguration() -> Realm.Configuration {
    return Realm.Configuration(inMemoryIdentifier: "AppTest", 
        readOnly: false, 
        schemaVersion: 10, 
        migrationBlock: nil)
}
然后我们插入所有的对象来模拟我们的起始条件。当我们访问
领域
时,将检索并使用第一个配置。在第一次实例化
领域之前,我们还将其设置为默认配置:

Realm.Configuration.defaultConfiguration=getConfiguration()

启动测试时,我们尝试通过尝试获取
领域
的新实例来模拟迁移,并将另一个配置传递给其初始化器:

func getConfiguration() -> Realm.Configuration {
    return Realm.Configuration(inMemoryIdentifier: "AppMigrationTest",
        readOnly: false, 
        schemaVersion: 21, 
        migrationBlock: { (migration: RealmSwift.Migration, oldSchemaVersion: UInt64) in
            // Migration code here
            }, 
        deleteRealmIfMigrationNeeded: false, 
        shouldCompactOnLaunch: nil, 
        objectTypes: nil)
   }
我们还将这个新的
配置设置为默认设置

我们已尝试在MemoryIdentifier中对这两种配置使用相同的
。当我们这样做时,新的
领域
使用初始的
配置
,并且不执行迁移。无论如何,领域在内部缓存配置是有道理的

如果使用不同的标识符,则不会执行迁移块。理解它们都被认为是不同的领域


我们想知道我们的方法是否完全错误。或者如果我们缺少任何一点来成功完成这个测试。是否有其他方法可以使用内存领域测试迁移块是否确实正确迁移?

迁移本质上不能在内存领域上运行。内存中的域只有在关闭后才存在,并且迁移不能在已经打开的域上运行。您需要使用磁盘上的域来测试迁移逻辑(并在测试结束时删除该域)。

感谢您的解释。完全有道理。这很容易改变。