SwiftData のテストがしたい

botman_blue iOS

Xcode-16.0 iOS-18.0

はじめに

iOS 17 から SwiftData が使えるようになってデータの永続化がサクッとできるようになりました。めっちゃ便利です。ただ下記のような実装で fetchPiyo1HogeList でちゃんと思い通りのデータが取れてるかテスト書きたいなと思ったときに少々めんどうです。どうやってテスト書けばいいんだ?ということについていくつか考えてみました。

案1テストで View を生成する(ボツ案)

ContentViewfetchPiyo1HogeListpublic にしてテスト書けるかも?ということで試してみましたが ContetView のキャスト部分でクラッシュするので無理でした。できたとしても ContentView にテストデータ作成用メソッドを用意しないといけなくなるのであんまイケてない感じになります。

案2 ViewModel にわける

正攻法ぽい ViewModel にわける方法です。

参考:How to write unit tests for your SwiftData code

テストはこんな感じです。

これで無事テストができるようになりました!ただ addHoge のようなテストデータ作成用メソッドを ViewModel に書かないといけないのでイケてない感じはします。

案3 Model にわける

下記のように HogeRepository というのにわけてみました。

テストはこんな感じです。

これはまあ案2とほぼ同じ感じですね。

案4 ModelContext を拡張する

SwiftData 使ってるんだからわざわざ ViewModel や Model つくって View から剥がしたくないということで 4 つ目の案です。

テストはこんな感じです。

addHoge を fileprivate にすることでテスト用メソッドということが明確になりました。ただ SwiftData に格納するデータが増えると extension ModelContext にどんどんメソッドが増えていくのでどうなんだろうという課題はあります。

追記(2024/11/25)

書いてから思いましたが案2、3は案4と組み合わせるともう少しよくなる気がしました。

こんな感じです。

おわりに

SwiftData のテストを書くために 4 つ案を出してみましたが今のところ個人開発なら案4でいいかなという気持ちです。今回は SwiftData に焦点をあてて書きましたがそもそも SwiftUI 製アプリのテストってどう書くのがいいんだろう?

https://amzn.to/4118Aol

コメント

タイトルとURLをコピーしました