【问题标题】:Swift 4 Unit Testing with Core Data使用核心数据进行 Swift 4 单元测试
【发布时间】:2018-04-06 21:46:49
【问题描述】:

我有一个 iOS 项目在模拟器上运行良好,但在我使用其测试包工作时似乎无法很好地链接到核心数据资源。

我在我的测试类的设置函数中从内存中创建了NSManagedObjectContext。但是,当我尝试运行程序时,测试功能失败,并且控制台有输出

"An NSManagedObject of class 'Projectname.Deck' must have a valid NSEntityDescription."

我有什么遗漏吗?我希望能够在开发应用程序的数据结构时对其进行单元测试。

谢谢!

编辑

测试类的相关部分:

class ProjectNameTests: XCTestCase {

var testDeck: Deck? = nil

    func setUpInMemoryManagedObjectContext() -> NSManagedObjectContext {
    let managedObjectModel = NSManagedObjectModel.mergedModel(from: [Bundle.main])!

    let persistentStoreCoordinator = NSPersistentStoreCoordinator(managedObjectModel: managedObjectModel)

    do {
        try persistentStoreCoordinator.addPersistentStore(ofType: NSInMemoryStoreType, configurationName: nil, at: nil, options: nil)
    } catch {
        print("Adding in-memory persistent store failed")
    }

    let managedObjectContext = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
    managedObjectContext.persistentStoreCoordinator = persistentStoreCoordinator

    return managedObjectContext
}//setUpInMemoryManagedObjectContext

override func setUp() {
    super.setUp()

    self.context = setUpInMemoryManagedObjectContext()
    testDeck = Deck(context: context)
    testDeck!.name = "Test Deck"
}//setUp
}//ProjectNameTests

【问题讨论】:

  • 显示课程代码和测试,告诉我们你得到了什么,我们可以提供帮助,这里没有足够的信息给你答案

标签: ios swift unit-testing core-data


【解决方案1】:

更新: 经过大量研究后,我发现我的问题与从课程本身中提取 NSEntityDescription 有关,而不是从当前上下文中提取。

我在我的 Deck 类中添加了以下方法(并将对其他 NSManagedObject 子类执行相同的操作):

public static func entityDescription(context: NSManagedObjectContext)->NSEntityDescription{
    return NSEntityDescription.entity(forEntityName: String(describing: self), in: context)!
}//entityDescription

然后我将测试用例中的初始化调用更改为以下内容:

let deckEntity: NSEntityDescription = Deck.entityDescription(context: context)
testDeck = Deck(entity: deckEntity, insertInto: context)

这样,对象就用从当前NSManagedObjectContext拉出的NSEntityDescription进行初始化,这让一切都变得更快乐了。

感谢Swift, Core Data, and unit testing 引导我走上正轨。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-31
    • 2020-02-04
    • 1970-01-01
    相关资源
    最近更新 更多