iOSエンジニアのつぶやき

毎朝8:30に iOS 関連の技術について1つぶやいています。まれに釣りについてつぶやく可能性があります。

【Swift】Realmでテストを行う

今日は、Swift ので単体テストを行う際に Realm のデータベースを入れ替えてテストする方法を紹介したいと思います🦅

それではやっていく

まずは、テストのデータを格納するための .realm ファイルを作成し保存します。また、簡単なテストデータ作るときは Realm Studio が便利なのでダウンロードしておきましょう。Realm Studio については前回の記事でも少し書いたので、ぜひ覗いて見てください。

yamato8010.hatenablog.com

今回は下記のように mock.realm という名前で、テストバンドルの中に保存して見ました。

f:id:yum_fishing:20210102231809p:plain

次に上記で作成した mock.realmFinder なり 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 をハンドリングできるやり方があればまた記事にしたいと思います🧑‍🔧

参考

その他の記事

yamato8010.hatenablog.com

yamato8010.hatenablog.com

yamato8010.hatenablog.com