ios - 为什么 Core Data 加载两个持久存储?
问题描述
我正在尝试做一些简单的Core Data
单元测试。
但是据我所见,创建了两个持久性存储(均为 sql 类型),因此我的setup(), tearDown()
单元测试方法被调用了两次,NSManagedObjectContext
从而导致了一些问题的重置。
这是我加载商店的代码:
func createContainer(storeType: StoreType, completion: @escaping (NSPersistentContainer) -> ()) {
let container = NSPersistentContainer(name: "Gym")
container.loadPersistentStores { description, error in
guard error == nil else {
fatalError("Failed to load store \(error!)")
}
description.type = storeType.type
completion(container)
}
}
这是我的单元测试代码:
import XCTest
import CoreData
@testable import Gym
class GymTests: XCTestCase {
var context: NSManagedObjectContext!
override func setUp() {
super.setUp()
createContainer(storeType: .inMemory) { container in
self.context = container.viewContext
}
}
func testAddingExercise() {
// Given
context.performChanges {
_ = Exercise.insert(into: self.context, name: "Bench Press", groups: Set(["Chest", "Triceps", "Shoulders"]))
_ = Exercise.insert(into: self.context, name: "Squats", groups: Set(["Legs"]))
_ = Exercise.insert(into: self.context, name: "Deadlifts", groups: Set(["Back", "Legs", "Arms"]))
}
// When
let exercises = Exercise.fetch(in: context)
// Then
XCTAssertEqual(exercises.count, 3)
}
override func tearDown() {
context = nil
super.tearDown()
}
}
第二次运行我的测试时,上下文被重置,tearDown()
因此在添加练习时上下文将为零。
不确定这是如何发生的。为什么要开两家店?
解决方案
推荐阅读
- python - Scrapy 从表中获取数据始终为空
- javascript - 添加对静态 html 的反应
- tensorflow - 将 Keras 模型转换为 TF Lite
- .net-core - 我可以在 Teams #Bot 框架中刷新聊天历史记录吗
- java - 如果 java 方法接受 (Object, Object...),有没有办法将单个参数输入其中?
- mysql - 从几天后状态仍然相同的表中获取这些行?
- typescript - @typescript-eslint 中的 noUnusedParameters 等价物
- c++ - libtorrent 是否支持带有摘要身份验证的 http web 种子?
- wildfly-10 - WildFly 18.0.0 中的文件下载问题 - 缺少响应标头
- ios - 如何在 swift 中从 GET url 创建 struct 和 init 值