我有一个使用 Core Data 作为数据库的应用程序,我正在尝试为我在 NSManagedObject
子类中编写的数据库查询编写测试用例,如果插入有效,它们将返回 true成功地。我正在尝试将一个对象插入到我的实体中,如下所示:
func testDBInser() {
let appDelegate: AppDelegate = AppDelegate()
let managedObjectContext = appDelegate.persistentContainer.viewContext
let myObject: MyManagedObject = MyManagedObject(context: managedObjectContext)
myObject.id = 10
myObject.name = "testObj"
XCTAssertTrue(UserProfileModel().insertObjectToUserProfile(myObject))
}
但是我的测试遇到此错误: NSManagedObject 只能位于单个 NSManagedObjectContext 中(或被单个 NSManagedObjectContext 观察)
最佳答案
有了CoreStore,生活变得更加轻松:
func testInsert {
// 1. Arrange
let dataStack: DataStack = {
let dataStack = DataStack(xcodeModelName: "ModelName")
do {
try dataStack.addStorageAndWait()
} catch let error {
XCTFail("Cannot set up database storage: \(error)")
}
return dataStack
}()
// 2. Action
do {
try dataStack.perform(synchronous: { transaction in
let object = transaction.create(Into<TestObject>())
object.name = "Test"
})
} catch let error {
XCTFail("Cannot perform database transaction: \(error)")
}
// 3. Assert
do {
try dataStack.perform(synchronous: { transaction in
guard transaction.fetchOne(From<TestObject>(), Where("name", isEqualTo: "Test")) != nil else {
XCTFail("Cannot get database object")
}
})
} catch let error {
XCTFail("Cannot perform database transaction: \(error)")
}
}
关于swift - 核心数据查询的单元测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47988341/