我有很多 Realm 数据模型,我想在快速规范中进行测试。每个模型的测试机制是相同的:
- 期望对象类型的领域为空
- 从 JSON 文件加载示例数据
- 使用 JSON 数据初始化模型
- 将模型对象保存到领域
- 期望领域包含加载的对象
所有模型都继承自同一个 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 值有没有办法获得实际的模型类型而不仅仅是继承的父类型?