首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >测试核心数据

测试核心数据
EN

Stack Overflow用户
提问于 2019-06-14 12:44:30
回答 1查看 38关注 0票数 0

我想为我的核心数据管理器设置一个模拟。

我用核心数据堆栈的老方法来做这件事,但我想在练习中做这件事。

在我设置的主核心数据管理器中

代码语言:javascript
运行
复制
var objectContext: NSManagedObjectContext! = nil
    var entity: NSEntityDescription! = nil
    guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
    objectContext = appDelegate.persistentContainer.viewContext
    entity = NSEntityDescription.entity(forEntityName: Constants.entityName, in: objectContext)!

很明显,我不能在mock中使用UIApplication的持久化容器。

因此,我尝试使用以下代码:

代码语言:javascript
运行
复制
objectContext =  NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
let entityOne = NSEntityDescription.insertNewObject(forEntityName: Constants.entityName, into: objectContext)

然而,我得到错误"NSInvalidArgumentException","+entityForName: nil不是用于搜索实体名称‘TaskEntity’的合法NSPersistentStoreCoordinator“

那么我如何为我的模拟设置一个新的objectContext呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-14 13:30:31

一种解决方案是创建一个完整的核心数据堆栈,但让持久存储只驻留在内存中。这样你就不需要处理一些应用委托依赖了。将context设置为nil,然后在tearDown()中从协调器中删除存储

代码语言:javascript
运行
复制
class TestExample: XCTestCase {
    var storeCordinator: NSPersistentStoreCoordinator!
    var managedObjectContext: NSManagedObjectContext!
    var managedObjectModel: NSManagedObjectModel!
    var store: NSPersistentStore!

    override func setUp() {
        super.setUp()

        managedObjectModel = NSManagedObjectModel.mergedModel(from: nil)
        storeCordinator = NSPersistentStoreCoordinator(managedObjectModel: managedObjectModel)

        do {
            store = try storeCordinator.addPersistentStore(
                ofType: NSInMemoryStoreType, configurationName: nil, at: nil, options: nil)
        } catch {
            XCTFail("Failed to create a persistent store, \(error)")
        }
        managedObjectContext = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
        managedObjectContext.persistentStoreCoordinator = storeCordinator
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56591498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档