내 영속성 레이어에 realm-cocoa을 사용하고 있습니다.신속하게 realm-cocoa를 모의하는 방법
class RealmMetaData : AbstractMetaData {
var realm: RealmInterface
var isFirstLaunch: Bool = false
init(realm: RealmInterface = try! Realm()) {
self.realm = realm
let results = realm.objects(MyClass.self)
self.isFirstLaunch = (results.count == 0)
if (self.isFirstLaunch) {
realm.write {
realm.add(MyClass())
}
}
}
// some code
}
protocol RealmInterface {
// using a protocol based approach of mocking
func objects<T: Object>(type: T.Type) -> Results<T>
func write(@noescape block: (() throws -> Void)) throws
func add(object: Object)
}
extension Realm: RealmInterface {
func add(object: Object) { self.add(object, update: false) }
// there is a method for Realm with signature: add(object:Object, update:Bool = false)
// but swift extension dose not permit default function parameter, hence the wrapping
}
realm
그런 다음 내 테스트 코드에서, 나는 RealmInterface
의 조롱 버전을 쓸 수 및 Constructor Injection를 사용하여 RealmMetaData
인스턴스에 주입의 클래스 중 하나가 따라한다.
조롱 된 RealmInterface
을 구현할 때 objects
함수를 모의 해 빈 목록을 반환하는 것은 매우 어려운 것으로 나타났습니다. 함수 시그니처 Results<T>
의 반환 형식은 Realm Framework에서 제공하는 형식이므로 사용할 수있는 빈 생성자가 없습니다. 여기에 내가 붙어있는 곳이있다.
그 Result<T>
은 final
키워드를 사용하는 클래스이므로 빈 컬렉션을 가져 오는 데 개인적인 방법으로 사용하기 위해 하위 클래스로 만들 수 없습니다.
미리 감사드립니다.
마음에 오는 첫 번째 제안은 테스트 클래스 내의 메모리 렐름을 유지하고 관리하여이 모든 메소드를 메모리에 전달하는 것입니다. – Dmitry
@ 드미트리 그래, 그 덕분에, 고마워. 이 의견을 답으로 써 주시면 받아 들일 수 있습니까? –