0

我有很多 Realm 数据模型,我想在快速规范中进行测试。每个模型的测试机制是相同的:

  1. 期望对象类型的领域为空
  2. 从 JSON 文件加载示例数据
  3. 使用 JSON 数据初始化模型
  4. 将模型对象保存到领域
  5. 期望领域包含加载的对象

所有模型都继承自同一个 BaseModel 类型。

由于样板代码是相同的,我希望使用表驱动的方法来使用数组和类反射进行测试,如下所示:

let tests: [String] = [
    "Model1",
    "Model2",
    "Model3"
]
for testClass in tests {
    describe(testClass) {
        // Use reflection to get the model type, but really I don't want the base model type, I want the actual type since Realm needs it
        let modelType = NSClassFromString("MyApp.\(testClass)") as! BaseModel.Type
        // Test the model
        it("Adds good \(testClass) from json", closure: {
            expect(realm.objects(modelType).count).to(equal(0))

            if let json = self.loadJsonFromFile("json-data") {
                if let e = modelType.init(JSON: json) {
                    do {
                        try realm.write {
                            realm.add(e, update: true)
                        }
                    } catch {}
                }
            }

            expect(realm.objects(modelType).count).to(equal(1))

        })
    }
}

这失败了,因为 BaseModel 类型并不是我想要实例化的。我想实例化实际的 testClass 类型,因为我需要将正确的模型类型插入 Realm 才能使其工作。此外,基本模型有几个未定义的部分,Realm 需要,例如留给后代模型实现的主键。

尝试使用反射来获取实际模型类的概念实际上与 Realm 是分开的,因此这不一定是 Realm 问题。由于我不知道循环中的模型类型,除了 String 值有没有办法获得实际的模型类型而不仅仅是继承的父类型?

4

0 回答 0