gpt4 book ai didi

swift - 测试内存中的 Realm 迁移

转载 作者:可可西里 更新时间:2023-11-01 01:58:44 26 4
gpt4 key购买 nike

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

在测试期间,我们想模拟一个迁移过程并检查我们迁移的 Realm 的最终状态。

我们使用 Configuration 工厂配置第一个 Realm:

func getConfiguration() -> Realm.Configuration {
return Realm.Configuration(inMemoryIdentifier: "AppTest",
readOnly: false,
schemaVersion: 10,
migrationBlock: nil)
}

然后我们插入所有对象来模拟我们的起始条件。当我们访问我们的 Realm 时,将检索并使用第一个配置。在我们第一次实例化我们的 Realm 之前,我们还将它设置为我们的默认配置:

Realm.Configuration.defaultConfiguration = getConfiguration()

启动测试时,我们尝试通过尝试获取 Realm 的新实例来模拟迁移,将另一个配置传递给它的初始化程序:

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)
}

我们还将这个新的 Configuration 设置为默认值。

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

如果我们使用不同的标识符,则不会执行迁移 block 。了解它们都被认为是不同的 Realm 。

我们想知道我们的方法是否完全不正确。或者,如果我们缺少任何一点来成功完成此测试。是否有任何其他方法可以使用内存中的 Realm 来测试迁移 block 是否实际迁移正确?

最佳答案

迁移本质上不能在内存中运行。内存中的 Realm 仅在关闭之前存在,并且无法在已经打开的 Realm 上运行迁移。您将需要使用磁盘上的 Realm 来测试迁移逻辑(并在测试结束时删除 Realm)。

关于swift - 测试内存中的 Realm 迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48330696/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com