SwiftData ModelContainer Lifetime in Tests
SwiftData ModelContainer Lifetime in Tests
錯誤
SwiftData 測試只保留 ModelContext,沒有保留 ModelContainer。測試一進到 modelContext.fetch(...) 就 crash,Xcode 顯示:
1
Test crashed with signal trap.
問題程式碼:
1
2
let container = try ModelContainer(...)
self.modelContext = container.mainContext
container 是區域變數,init 結束後可能被釋放。ModelContext 還在,但底層 CoreData stack 生命週期已經不可靠。
解法
測試 harness 要明確持有 ModelContainer:
1
2
let modelContainer: ModelContainer
let modelContext: ModelContext
建立後一起保存:
1
2
self.modelContainer = container
self.modelContext = container.mainContext
記住
SwiftData 單元測試不要只保存 mainContext。ModelContainer 和 ModelContext 要一起活到測試結束。
This post is licensed under CC BY 4.0 by the author.