【Swift】Realmでテストを行う
今日は、Swift
ので単体テストを行う際に Realm
のデータベースを入れ替えてテストする方法を紹介したいと思います🦅
それではやっていく
まずは、テストのデータを格納するための .realm
ファイルを作成し保存します。また、簡単なテストデータ作るときは Realm Studio
が便利なのでダウンロードしておきましょう。Realm Studio
については前回の記事でも少し書いたので、ぜひ覗いて見てください。
今回は下記のように mock.realm
という名前で、テストバンドルの中に保存して見ました。
次に上記で作成した mock.realm
を Finder
なり Terminal
なりで開き、Realm Studio
を立ち上げます。GUI で必要なデータをポチポチ保存します(CSV
などでもインポートできます)。
最後にテストで使用する Realm
を下記のように定義すれば完了です。
class MockRealmStore { lazy var realm: Realm = { let testRealmFilePath = Bundle(for: type(of: self)).path(forResource: "mock", ofType: "realm") let testRealmFileUrl = URL(fileURLWithPath: testRealmFilePath!) return try! Realm(configuration: Realm.Configuration(fileURL: testRealmFileUrl, schemaVersion: 4)) }() func get<T>(type: T.Type, id: String) -> T? where T : Object { if let object = realm.object(ofType: type, forPrimaryKey: id) { return object } return nil } }
Bundle(for: type(of: self))
で、そのクラスが属している Bundle
(ここではTest Bundle
) を取得し、mock.realm
のパスから Realm.Configuration
を初期化しています。schemaVersion
は、カラムの追加など変更の回数で適所書き換える必要があるのでご注意ください。うまく、schemaVersion
をハンドリングできるやり方があればまた記事にしたいと思います🧑🔧