在测试目标中测试 SwiftData 模型,“无法找到当前活动的容器”

问题描述 投票:0回答:2
我正在应用程序开发的初步阶段构建 SwiftData 模型。我正在使用测试驱动开发 (

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 当前活动的容器

@Transient private var _$backingData: any SwiftData.BackingData<StringModel> = StringModel.createBackingData()

在测试中设置 SwiftData 堆栈以测试对象的最简单方法是什么?我并不关心实际保存数据或运行查询,正如 SwiftData / Core Data 在实际应用程序中提供的那样。我只想独立构建和测试每个类。

testing core-data tdd swift-data swift-data-modelcontext
2个回答
0
投票
添加下面的

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

 的配置似乎非常适合此类测试。


0
投票
在最简单的形式中,您需要一个可用于测试的 ModelContainer 实例。

您可以向测试类添加属性

var container: ModelContainer!
然后在其中一种setUp方法中进行设置

container = try ModelContainer(for: StringContainer.self, configurations: [ModelConfiguration(isStoredInMemoryOnly: true)])
    
© www.soinside.com 2019 - 2024. All rights reserved.