你好,
我正在尝试对SwiftData 模型进行单元测试,但遇到了一个奇怪的情况并且找不到问题的答案。
我向您展示的第一个解决方案不起作用,第二个解决方案起作用。
首先,这是我的@Model:
@Model
class Movie {
var name: String
init(name: String) {
self.name = name
}
}
第一个解决方案(不起作用):
var modelContainer: ModelContainer {
do {
let container = try ModelContainer(for: Movie.self, configurations: ModelConfiguration(isStoredInMemoryOnly: true))
return container
} catch {
fatalError("Failed to create container.")
}
}
@MainActor
final class Tests: XCTestCase {
private var context: ModelContext!
override func setUp() {
context = modelContainer.mainContext
}
func testCountShouldBeOne() {
let movie = Movie(name: "NewMovie")
context.insert(movie) // Thread 1: EXC_BREAKPOINT
do {
let descriptor = FetchDescriptor<Movie>()
let movies = try context.fetch(descriptor)
XCTAssertEqual(movies.count, 1)
} catch {
XCTFail()
}
}
}
第二种解决方案(有效):
(modelContainer remains the same)
@MainActor
final class Tests: XCTestCase {
private var container: ModelContainer!
override func setUp() {
container = modelContainer
}
func testCountShouldBeOne() {
let movie = Movie(name: "NewMovie")
container.mainContext.insert(movie)
do {
let descriptor = FetchDescriptor<Movie>()
let movies = try container.mainContext.fetch(descriptor)
XCTAssertEqual(movies.count, 1)
} catch {
XCTFail()
}
}
}
因此,区别在于我现在必须调用 container.mainContext 进行 SwiftData 操作,并且它可以工作,但是在第一个解决方案中,我有:context.something,我得到了 EXC_BREAKPOINT。
有人知道为什么吗?
谢谢 !