swift - 核心数据查询的单元测试用例

标签 swift unit-testing core-data

我有一个使用 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/

相关文章:

swift - NSDecimalNumber.adding from NSManagedObjects 遇到无法识别的选择器问题

unit-testing - 如何将单元测试项目添加到我现有的 asp.net core 项目中?

iphone - 核心数据 iCloud 合并协议(protocol)

ios - 核心数据应用组同步(带扩展)

swift - 枚举 Int 转换为 NSNumber - 无法将类型的值转换为预期的参数类型

json - 解析 JSON 时遇到问题

android - 如何调整 Robolectric 测试的屏幕密度?

unit-testing - 在 Prolog 中测试。如何运行单元测试来检查我的输出文件是否与我的文本文件匹配?

ios - UIPickerView 不加载行

ios - Xcode swift : Cannot close popup Image