Как использовать табличные тесты в Swift с отражением классов

У меня есть много моделей данных 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, такие как primaryKey, который оставлен для реализации потомками.

Концепция попытки использовать отражение для получения реального класса модели действительно отделена от Realm, поэтому это не обязательно вопрос Realm. Поскольку я не знаю тип модели в цикле, кроме как значение String, есть ли способ получить реальный тип модели, а не только унаследованный родительский тип?

0 ответов

Другие вопросы по тегам