tdd) 来迭代模型并在将模型集成到应用程序本身之前解决问题。
在我添加@Model
声明之前,使用类工作正常。但是,一旦将类添加到 SwiftData,如果没有“活动容器”,我就无法测试它们。
import SwiftData
@Model
class StringModel {
let string: String
init(_ string: String) {
self.string = string
}
}
class Tester: XCTestCase {
func testSwiftData() throws {
let model = StringModel("foo")
XCTAssertEqual(model.string, "foo")
}
}
测试用例因错误而崩溃:
线程 1:致命错误:未能找到 StringModel 当前活动的容器在测试中设置 SwiftData 堆栈以测试对象的最简单方法是什么?我并不关心实际保存数据或运行查询,正如 SwiftData / Core Data 在实际应用程序中提供的那样。我只想独立构建和测试每个类。
@Transient private var _$backingData: any SwiftData.BackingData<StringModel> = StringModel.createBackingData()
config
和
container
行解决了崩溃问题并导致测试通过。
func testSwiftData() throws {
let config = ModelConfiguration(isStoredInMemoryOnly: true)
let container = try! ModelContainer(for: StringModel.self, configurations: config)
let model = StringModel("foo")
XCTAssertEqual(model.string, "foo") // ok
}
使用带有 isStoredInMemoryOnly
的配置似乎非常适合此类测试。
您可以向测试类添加属性
var container: ModelContainer!
然后在其中一种setUp方法中进行设置
container = try ModelContainer(for: StringContainer.self,
configurations: [ModelConfiguration(isStoredInMemoryOnly: true)])